JVM隨筆

JVM隨筆:

  • JVM發展:Classic VM —>HotSpot VM+JRokit VM —>整合HotSpot VM(主流jvm)

  • JVM源碼結構

  • JVM內存區域:

    JVM內存區域共分爲5大塊。分別爲堆內存(Heap),方法區(Method Area),本地方法棧(Native Method Stack),虛擬機棧(JVMStacks)和程序計數器;
    堆內存:主要儲存 java 方法在運行過程中 new 出來的對象->String str = new String();則new String()則存儲於堆內存中,GC垃圾收集器(分代回收算法)主要工作於此區域,所有線程共享些區域,易出現OutOfMemoryError異常。

方法區:主要儲存經過JVM加載之後的類信息class,常量 final,靜態變量 static和編譯後的代碼等數據,垃圾回收器也將作用於此區域進行廢棄數據回收。

虛擬機棧:主要儲存局部變量(byte,boolean,char,short,float,int,double,long)以及對象的引用String str = new String()–>str,操作數棧,動態鏈接,方法出口等信息。每個java方法執行時會創建一個棧楨,棧楨的入棧到出棧 對應着一個java方法調用開始直至結束的過程。爲 JVM執行java方法服務。操作數棧是JVM的一個工作區->加法運算->JVM使用指令將兩個數從局部變量中提出來,然後壓入到操作數棧中,再執行加法操作,最後將結果壓入到操作數棧中,再將操作棧中的結果值儲存到局部變量的索引中,以索引引出結果展示。

本地方法棧:主要儲存程序中使用到的 Native方法(非java語言編寫)—>java調用非java代碼的接口:native public void Native1( int x ) ;

程序計數器:較小的內存區間,主要儲存當前線程執行到某個位置,通過計數器的值來選擇下一條需要執行的字節碼指令,程序的分支,集合的循環,方法之間的跳轉或者異常處理等都需要根據程序計數器來指定,每個線程獨立擁有一個程序計數器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章