JVM運行時數據區划分


Java內存空間

內存是非常重要的系統資源,是硬盤和cpu的中間倉庫及橋梁,承載着操作系統和應用程序的實時運行。JVM內存布局規定了JAVA在運行過程中內存申請、分配、管理的策略,保證了JVM的高效穩定運行。不同的jvm對於內存的划分方式和管理機制存在着部分差異(對於Hotspot主要指方法區)

 

(圖源阿里)JDK8的元數據區+JIT編譯產物 就是JDK8以前的方法區

 JavaAPI中的Runtime

public class Runtime
extends Object

 

Every Java application has a single instance of class Runtime that allows the application to interface with theenvironment in which the application is running. The current runtime can be obtained from the getRuntime method.
每個Java應用程序都有一個Runtime類的實例,該實例允許該應用程序與運行該應用程序的環境進行交互。 當前運行時可以從getRuntime方法獲得。

Java內存分區介紹

java虛擬機定了了若干種程序運行期間會使用到的運行時數據區,其中有一些會隨着虛擬機啟動而創建,隨着虛擬機退出而銷毀。另外一些則是與縣城一一對應的,這些與線程對應的數據區域會隨着線程開始和結束而創建和銷毀。
如圖,灰色的區域為單獨線程私有的,紅色的為多個線程共享的,即

 

Java中的線程與進程

1.每個線程:獨立包括程序計數器、棧、本地棧

2.線程間共享:堆、堆外內存(方法區、永久代或元空間、代碼緩存)

 

圖片說明:嚴格對照Java內存分區

PC即程序計數器

VMS即虛擬機棧

NMS即本地方法棧

 

一般來說,jvm優化95%是優化堆區,5%優化的是方法區,至於棧區無非出入棧操作優化較少
 

Java線程

1.線程是一個程序里的運行單元,JVM允許一個程序有多個線程並行的執行;

2.在HotSpot JVM,每個線程都與操作系統的本地線程直接映射。

  當一個java線程准備好執行以后,此時一個操作系統的本地線程也同時創建。java線程執行終止后。本地線程也會回收。

3.操作系統負責所有線程的安排調度到任何一個可用的CPU上。一旦本地線程初始化成功,它就會調用java線程中的run()方法.

JVM系統線程分類

如果你使用jconsole或者任何一個調試工具,都能看到在后台有許多線程在運行。這些后台線程不包括調用main方法的main線程以及所有這個main線程自己創建的線程;

這些主要的后台系統線程在HotSpot JVM里主要是以下幾個:

1.虛擬機線程:這種線程的操作時需要JVM達到安全點才會出現。這些操作必須在不同的線程中發生的原因是他們都需要JVM達到安全點,這樣堆才不會變化。這種線程的執行包括“stop-the-world”的垃圾收集,線程棧收集,線程掛起以及偏向鎖撤銷

2.周期任務線程:這種線程是時間周期事件的提現(比如中斷),他們一般用於周期性操作的調度執行。

3.GC線程:這種線程對於JVM里不同種類的垃圾收集行為提供了支持

4.編譯線程:這種線程在運行時會降字節碼編譯成本地代碼

5.信號調度線程:這種線程接收信號並發送給JVM,在它內部通過調用適當的方法進行處理。

 
 
 
 


免責聲明!

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



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