類加載檢查 -> 分配內存 -> 初始化零值 -> 設置對象頭 -> 執行 init 方法。html
jps -l
。jstat -gcutil <pid>
。jinfo -flags <pid>
。jmap -dump:format=b,file=<filename> <pid>
。jhat <filename>
。jstack -l <pid>
。類型 | 名稱 | 數量 |
---|---|---|
u4 | magic(魔數) | 1 |
u2 | minor_version(次版本號) | 1 |
u2 | major_version(主版本號) | 1 |
u2 | constant_pool_count(常量池容量計數器) | 1 |
cp_info | constant_pool(常量池) | constant_pool_count - 1 |
u2 | access_flags(訪問標誌) | 1 |
u2 | this_class(類索引) | 1 |
u2 | super_class(父類索引) | 1 |
u2 | interfaces_count(接口計數器) | 1 |
u2 | interfaces(接口索引集合) | interfaces_count |
u2 | fields_count(字段表計數器) | 1 |
field_info | fields(字段表集合) | fields_count |
u2 | methods_count(方法表計數器) | 1 |
method_info | methods(方法表集合) | methods_count |
u2 | attributes_count(屬性表計數器) | 1 |
attribute_info | attributes(屬性表集合) | attributes_count |
加載 -> 鏈接(驗證、準備、解析) -> 初始化。java
若是一個類加載器收到類加載的請求,它會先把這個請求委派給父加載器去完成,而不會本身去嘗試加載這個類。只有父加載器沒法完成這個加載請求時,子加載器纔會嘗試本身去加載。程序員
棧幀(Stack Frame)是用於支持虛擬機進行方法調用和方法執行的數據結構。棧幀存儲了方法的局部變量表、操做數棧、動態鏈接、方法返回地址和一些額外的附加信息。每個方法從調用開始至執行完成的過程,都對應着一個棧幀在虛擬機裏面從入棧到出棧的過程。算法
方法調用並不等於方法執行,方法調用階段惟一的任務就是肯定被調用方法的版本(即調用哪個方法)。此時,在 Class 文件裏存儲的只是符號引用,而不是直接引用,只有在類加載期間,甚至是運行期間才能肯定目標方法的直接引用。數組
在編譯期間對註解進行處理。能夠讀取、修改、添加抽象語法樹中的任何元素。安全
分層編譯根據編譯器編譯、優化的規模與耗時,劃分出不一樣的編譯層次。微信
判斷一段代碼是否是熱點代碼,是否是須要觸發即時編譯,這樣的行爲稱爲熱點探測。數據結構
HotSpot 虛擬機使用的是基於計數器的熱點探測方法,它爲每一個方法準備了兩類計數器。多線程
Java 使用的線程調度方式就是搶佔式調度。併發
按線程安全的「安全程度」由強至弱排序,能夠將多個線程的共享數據分爲 5 類:不可變、絕對線程安全、相對線程安全、線程兼容和線程對立。
《深刻理解 Java 虛擬機》讀書筆記:Java 內存區域與內存溢出異常
《深刻理解 Java 虛擬機》讀書筆記:垃圾收集器與內存分配策略
《深刻理解 Java 虛擬機》讀書筆記:虛擬機性能監控與故障處理工具
《深刻理解 Java 虛擬機》讀書筆記:類文件結構
《深刻理解 Java 虛擬機》讀書筆記:虛擬機類加載機制
《深刻理解 Java 虛擬機》讀書筆記:虛擬機字節碼執行引擎
《深刻理解 Java 虛擬機》讀書筆記:早期(編譯期)優化
《深刻理解 Java 虛擬機》讀書筆記:晚期(運行期)優化
《深刻理解 Java 虛擬機》讀書筆記:Java 內存模型與線程
《深刻理解 Java 虛擬機》讀書筆記:線程安全與鎖優化
微信公衆號:驚卻一目
我的博客:驚卻一目