虛擬機中線程的私有與共享區


 

 直接上圖:

 

從圖中看到,JVM內存分為兩個主要區域,一個是所有線程共享的數據區,一個是線程隔離數據區線程私有)

 

線程隔離數據區

程序計數器(Program Counter Register):
一小塊內存空間,單前線程所執行的字節碼行號指示器。字節碼解釋器工作時,通過改變這個計數器的值來選取下一條需要執行的字節碼指令,分支、循環、跳轉、異常處理、線程恢復等基礎功能都需要依賴這個計數器來完成。

JVM虛擬機棧(Java Virtual Machine Stacks):
Java方法執行內存模型,用於存儲局部變量,操作數棧,動態鏈接,方法出口等信息。是線程私有的。

本地方法棧(Native Method Stacks):
為JVM用到的Native方法服務,Sun HotSpot 虛擬機把本地方法棧和JVM虛擬機棧合二為一。是線程私有的。

 

線程共享的數據區

方法區Method Area):
用於存儲JVM加載的類信息、常量、靜態變量、即使編譯器編譯后的代碼等數據。
運行時常量池Runtime Constant Pool):
是方法區的一部分,用於存放編譯器生成的各種字面量和符號引用,這部分內容將在類加載后存放到方法取得運行時常量池中。具備動態性,用的比較多的就是String類的intern()方法。
JVM堆 Java Virtual Machine Heap):
存放所有對象實例的地方。
新生代,由Eden Space 和大小相同的兩塊Survivor組成
舊生待,存放經過多次垃圾回收仍然存活的對象

如圖:

 

直接內存Direct Memory):
它並不是虛擬機運行時數據區的一部分,也不是JAVA虛擬機規范中定義的內存區域。在JDK1.4中加入了NIO類,引入了一種基於通道(Channel)於緩沖區(Buffer)的I/O方式,他可以使用Native函數庫直接分配堆外內存,然后通過一個存儲在JAVA堆里面的DirectByteBuffer對象作為這塊內存的引用進行操作。這樣能在一些場景中顯著提高性能,因為避免了在JAVA堆中和Native堆中來回復制數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM