官术网_书友最值得收藏!

JVM運行時內存結構

Java虛擬機運行時數據區域分為方法區、堆、虛擬機棧、本地方法棧和程序計數器[1],如圖1.6所示。

圖1.6 JVM運行時內存結構

Java堆(Java Heap)是線程共享的,用于存放對象實例,但并不是所有的對象都會存放在堆中。比如開啟內存逃逸分析,JIT即時編譯器會將多次被執行的字節碼編譯為機器碼,同時也會分析方法體內的對象創建,如果方法體內創建的對象沒有逃離出方法體之外,即不會被別的地方引用,沒有別的線程使用,那么就不需要將對象分配到堆中,而直接分配到虛擬機棧上。

方法區(Method Area)也是線程共享的,用于存放虛擬機加載的類信息、常量、靜態變量等數據。在JDK1.8之前,HotSpot虛擬機使用永久代實現方法區,而1.8及之后使用元數據區實現方法區。運行時常量池是方法區的一部分,用于存放類被加載后的常量池表。

Java虛擬機棧(Java Virtual Machine Satck)是線程私有的,它的生命周期與線程的生命周期相同。根據《Java虛擬機規范》的規定,native方法應該在本地方法棧中執行,而在HotSpot虛擬機中,本地方法棧與虛擬機棧是合二為一的。


注釋:

[1] 周志明.深入理解Java虛擬機:JVM高級特性與最佳實踐(第3版)第二章,運行時數據區域

主站蜘蛛池模板: 辽阳市| 连州市| 华坪县| 永吉县| 宜州市| 万全县| 安义县| 罗定市| 定西市| 闵行区| 阳春市| 屯门区| 凤山市| 利辛县| 东明县| 荥经县| 梓潼县| 崇信县| 石泉县| 镇坪县| 慈利县| 岳池县| 灵山县| 会同县| 瑞金市| 大名县| 榆中县| 凤凰县| 万全县| 随州市| 黄大仙区| 会东县| 漯河市| 尚义县| 会昌县| 公主岭市| 新闻| 黄石市| 水富县| 任丘市| 阜宁县|