JVM體系結構
Java虛擬機主要分為五大模塊:
- 類裝載器子系統
- 運行時數據區
- 執行引擎
- 本地方法接口
- 垃圾收集模塊
1、JVM一共分為五個區,分別為方法區、堆、Java棧、本地方法棧、程序計? 2、方法區、堆為線程共享區域,GC會對二個區進行垃圾回收;
-
? 3、Java棧、本地方法棧、程序計數器為線程私有區域;
? 4、程序計數器:程序計數器是一塊較小的內存空間,是當前線程所執行的字節碼的行號指示器?程序計算器處于線程獨占區?如果線程執行的是java方法,記錄的是正在執行的虛擬機字節 碼指令的地址,如果是native方法,這個計數器值為undefined;
? 5、Java棧:棧也叫棧內存,主管Java程序的運行,是在線程創建時 創建,它的生命期是跟隨線程的生命期,線程結束棧內存也就釋放,對于棧來說不存在垃圾回收問題,只要線程一結束該棧就Over,生命周期和線程一致,是線程私有的。8種基本類型的變量+對象的引用變量+實例方法都是在函數的棧內存中分配,棧里有棧幀,有返回對象、本地變量表、操作數棧、動態連接。
? 6、本地方法棧:它的具體做法是NativeMethod Stack中登記native方法,在ExecutionEngine執行時加載本地方法庫;
? 7、方法區:方法區是被所有線程共享,所有字段和方法字節碼,以及一些特殊方法如構造函數,接口代碼也在此定義。簡單說,所有定 義的方法的信息都保存在該區域,此區屬于共享區間
方法區是一種特殊的堆,棧里面不會有垃圾,用完就彈出了,否則阻塞了main方法嗎,垃圾幾乎都在堆里,所以JVM性能調優%99都針對于堆