歡迎您光臨本站 註冊首頁

JVM執行時資料區劃分原理詳解

←手機掃碼閱讀     kyec555 @ 2020-05-12 , reply:0

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,在它內部通過呼叫適當的方法進行處理。 


[kyec555 ] JVM執行時資料區劃分原理詳解已經有1937次圍觀

http://coctec.com/docs/service/show-post-234059.html