1硫麻、JVM的工作原理
JVM的內(nèi)部體系結(jié)構(gòu)分為三部分爸邢,
- (1)類裝載器(ClassLoader)子系統(tǒng)
作用: 用來裝載.class文件 - (2)執(zhí)行引擎
作用:執(zhí)行字節(jié)碼,或者執(zhí)行本地方法 - (3)運行時數(shù)據(jù)區(qū)
方法區(qū)拿愧,堆杠河,java棧,PC寄存器浇辜,本地方法棧
2券敌、Java 的內(nèi)存管理
Java GC機制主要完成3件事:確定哪些內(nèi)存需要回收,確定什么時候需要執(zhí)行GC柳洋,如何執(zhí)行GC待诅。
Java內(nèi)存分配和回收的機制概括的說,就是:分代分配熊镣,分代回收卑雁。對象將根據(jù)存活的時間被分為:年輕代(Young Generation)、年老代(Old Generation)绪囱、永久代(Permanent Generation测蹲,也就是方法區(qū))
- 年輕代:使用“停止-復(fù)制”算法進行清理
- 老年代:老年代用的算法是標記-整理算法,即:標記出仍然存活的對象(存在引用的)鬼吵,將所有存活的對象向一端移動扣甲,以保證內(nèi)存的連續(xù)。
- 方法區(qū)(永久代):永久代的回收有兩種:常量池中的常量齿椅,無用的類信息琉挖,常量的回收很簡單,沒有引用了就可以被回收媒咳。對于無用的類進行回收粹排,必須保證3點:
(1)類的所有實例都已經(jīng)被回收
(2)加載類的ClassLoader已經(jīng)被回收
(3)類對象的Class對象沒有被引用(即沒有通過反射引用該類的地方)
3、Dalvik和ART虛擬機的區(qū)別
1涩澡、平臺支持差別:
Dalvik Android 4.4 及其以下平臺使用的虛擬機;
ART Android4.4以上平臺使用的虛擬機技術(shù)坠敷;
2妙同、工作原理差別:
在應(yīng)用程序啟動時,JIT(just-in-time膝迎,即時編譯技術(shù))通過進行連續(xù)的性能分析來優(yōu)化程序代碼的執(zhí)行粥帚,在程序運行的過程中,Dalvik虛擬機在不斷的進行將字節(jié)碼編譯成機器碼的工作限次。
ART引入了AOT(Ahead-Of-Time)這種預(yù)編譯技術(shù)芒涡,在應(yīng)用程序安裝的過程中柴灯,ART就已經(jīng)將所有的字節(jié)碼重新編譯成了機器碼。應(yīng)用程序運行過程中無需進行實時的編譯工作费尽,只需要進行直接調(diào)用.因此赠群,ART極大的提高了應(yīng)用程序的運行效率,同時也減少了手機的電量消耗旱幼,提高了移動設(shè)備的續(xù)航能力查描,在垃圾回收等機制上也有了較大的提升。
相對于Dalvik虛擬機模式柏卤,ART模式下Android應(yīng)用程序的安裝需要消耗更多的時間冬三,同時也會占用更大的儲存空間(指內(nèi)部儲存,用于儲存編譯后的代碼),但節(jié)省了很多Dalvik虛擬機用于實時編譯的時間
4缘缚、多線程和安全問題
多線程編程中的三個核心概念
- 原子性:即一個操作(有可能包含有多個子操作)要么全部執(zhí)行(生效)勾笆,要么全部都不執(zhí)行(都不生效)。
- 可見性:當多個線程并發(fā)訪問共享變量時桥滨,一個線程對共享變量的修改窝爪,其它線程能夠立即看到「迷埃可見性問題是好多人忽略或者理解錯誤的一點酸舍。
- 順序性:順序性指的是,程序執(zhí)行的順序按照代碼的先后順序執(zhí)行里初。
activity啟動過程
java泛型
java反射
activity事件分發(fā)
volley原理
進程間傳輸方式
熱修復(fù)相關(guān)的問題
一個listview很卡頓啃勉,讓分析一下其中可能的原因和你碰見這個問題如何動手解決。
怎么停止一個線程,waitxxx有用嗎双妨?
靜態(tài)內(nèi)部類引用外部類怎么解決引用問題
for循環(huán)…的線程同步問題
Java虛擬機什么時候進行GC淮阐,Android虛擬機呢?
弱引用和軟引用的區(qū)別刁品?各自的使用場景是什么
RxJava和EventBus的區(qū)別泣特?好奇怪
一個類中聲明private static Bitmap會引起什么問題,主要考察的是內(nèi)存泄露
ScrollView和Listview的區(qū)別挑随?
listview加載圖片會有什么問題状您,如果引起圖片錯位是什么原因?qū)е碌模吭趺唇鉀Q兜挨?
多線程和安全問題
事件沖突
一些常用的 list,map 原理膏孟,以及子類之間的差別
bitmap局部加載
IntentService、HandlerThread