国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

深入理解JVM結構

2019-11-15 00:34:51
字體:
來源:轉載
供稿:網友
深入理解JVM結構JVM結構探究----1.JVM結構示意圖

2.JVM運行時數據區

1)程序計數器(PRogram Counter Register)

  程序計數器是用于存儲每個線程下一步將執行的JVM指令,如該方法為native的,則程序計數器中不存儲任何信息

2)JVM棧(JVM Stack)

  JVM棧是線程私有的,每個線程創建的同時都會創建JVM棧,JVM棧中存放的為當前線程中局部基本類型的變量(java中定義的八種基本類型:boolean、char、byte、short、int、long、float、double)、部分的返回結果以及StackFrame,非基本類型的對象在JVM棧上僅存放一個指向堆上的地址

3)堆(heap)

  它是JVM用來存儲對象實例以及數組值的區域,可以認為Java中所有通過new創建的對象的內存都在此分配,Heap中的對象的內存需要等待GC進行回收。

 ?。?)堆是JVM中所有線程共享的,因此在其上進行對象內存的分配均需要進行加鎖,這也導致了new對象的開銷是比較大的

 ?。?)SunHotspotJVM為了提升對象內存分配的效率,對于所創建的線程都會分配一塊獨立的空間TLAB(ThreadLocalAllocationBuffer),其大小由JVM根據運行的情況計算而得,在TLAB上分配對象時不需要加鎖,因此JVM在給線程的對象分配內存時會盡量的在TLAB上分配,在這種情況下JVM中分配對象內存的性能和C基本是一樣高效的,但如果對象過大的話則仍然是直接使用堆空間分配

 ?。?)TLAB僅作用于新生代的EdenSpace,因此在編寫Java程序時,通常多個小的對象比大的對象分配起來更加高效。

4)方法區(MethodArea)

 ?。?)在SunJDK中這塊區域對應的為PermanetGeneration,又稱為持久代。

 ?。?)方法區域存放了所加載的類的信息(名稱、修飾符等)、類中的靜態變量、類中定義為final類型的常量、類中的Field信息、類中的方法信息,當開發人員在程序中通過Class對象中的getName、isInterface等方法來獲取信息時,這些數據都來源于方法區域,同時方法區域也是全局共享的,在一定的條件下它也會被GC,當方法區域需要使用的內存超過其允許的大小時,會拋出OutOfMemory的錯誤信息。

5)本地方法棧(NativeMethodStacks)

  JVM采用本地方法棧來支持native方法的執行,此區域用于存儲每個native方法調用的狀態。

6)運行時常量池(RuntimeConstantPool)

  存放的為類中的固定的常量信息、方法和Field的引用信息等,其空間從方法區域中分配。JVM在加載類時會為每個class分配一個獨立的常量池,但是運行時常量池中的字符串常量池是全局共享的。


上一篇:SSH學習——Spring基礎

下一篇:sturuts配置

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 合江县| 黑山县| 昌乐县| 福建省| 花莲市| 华池县| 洛川县| 萍乡市| 图木舒克市| 崇仁县| 宁陵县| 阿拉善盟| 乳山市| 东明县| 石渠县| 色达县| 峨眉山市| 开封市| 宁蒗| 嘉义县| 嘉义市| 光泽县| 昂仁县| 夏邑县| 香格里拉县| 霍州市| 吉首市| 吉木萨尔县| 林口县| 宿州市| 富锦市| 临江市| 桦南县| 安泽县| 乃东县| 海丰县| 崇礼县| 庆元县| 分宜县| 遵义市| 卓尼县|