- Java虛擬機字節碼:從入門到實戰
- 吳就業
- 459字
- 2021-01-08 19:08:22
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版)第二章,運行時數據區域
推薦閱讀
- Java多線程編程實戰指南:設計模式篇(第2版)
- AngularJS Testing Cookbook
- Rake Task Management Essentials
- Java FX應用開發教程
- 數據庫系統原理及MySQL應用教程
- 精通Linux(第2版)
- 硅谷Python工程師面試指南:數據結構、算法與系統設計
- PySpark Cookbook
- INSTANT Yii 1.1 Application Development Starter
- 零代碼實戰:企業級應用搭建與案例詳解
- Learning Nessus for Penetration Testing
- 數據分析與挖掘算法:Python實戰
- AI自動化測試:技術原理、平臺搭建與工程實踐
- 軟件開發中的決策:權衡與取舍
- Selenium WebDriver自動化測試完全指南