插件化,熱修復基礎之虛擬機

###java虛擬機 jvm
jvm整體結構
image.png

##jvm內存空間
java 棧區 它存放的是java方法執行時的所有的數據
棧幀 一個棧幀代表一個方法 每個方法的調用就是一個棧幀在虛擬機棧中入棧和出棧

本地方法棧:專門爲nativie方法服務,也是通過棧幀調用

方法區,存儲被虛擬機加載的類信息,常量,靜態變量等數據。

java堆:所有通過new創建的對象的內存都在堆中分配,是虛擬機中最大的一塊內存,是gc要回收的部分

image.png

##gc垃圾回收機制
垃圾收集算法
1,引用計數算法 對象被引用 計數器加1 (老算法,存在A-B相互引用,不會被回收)

2,可達性算法:從gcroot節點。尋找引用節點。沒有引用的節點標記爲垃圾節點,

###4種引用類型
分爲4種,用來控制對象的生命週期
強引用 不會被垃圾回收期回收,會拋出oom異常
軟引用 在內存足夠的情況下 不會去回收 效果和強引用一樣
弱引用 生命週期比軟引用少很多,在gc回收的時候,不管內存是否足夠 都會回收他
虛引用 就是沒有引用,垃圾回收期任何時候都會回收他
refercequene 一般和軟引用,弱引用關聯
如果軟應用被垃圾回收期回收了 就會把這個引用加入到這個隊列當中

垃圾回收算法
1,標記清除算法: 從根節點遍歷,將不可達的引用標記,在gc執行的時候回收掉標記後的引用,缺點是會造成內存碎片
2,複製算法:從根節點遍歷,複製所有可達的引用到一個新的內存,將原來的引用內存清空,不會產生碎片,但是效率比第一種差,(適合內存存活較少的時候)
3,標記整理算法:從根節點遍歷,將不可達的標記,清除後, 更新指針,將引用對象往空閒區移動,避免產生內存碎片

jvm虛擬機觸發垃圾回收的時機
1,java虛擬機無法在爲新的對象分配內存空間的時候
2,手動調用system.gc
3,低優先級的gc線程被啓動

java源代碼編譯過程 java-class的過程如下
image.png

image.png

##dalvik和jvm的不用
1,加載文件的格式不同一個加載class,一個加載dex
2,jvm只能存在一個,dvm可以存在多個
3,dvm是基於寄存器的,jvm是基於棧的

art
dvm使用jit將字節碼轉換成機器碼 效率低
art採用aot預編譯技術,執行數據更快

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章