jvm剖析

JVM結構剖析

工具: jvisualvm jdk本地Java線程識別,內存的分析工具 jvisualvm安裝Visual GC插件可以清楚看到GC的動態操作流程
GC:STW, stop the work,調優是爲了減少GC次數,即減少stop the work次數,提高用戶體驗;優先調優Full GC,

性能測試之jvisualvm監控分析
http://www.51testing.com/html/38/n-3724238.html
在這裏插入圖片描述
在這裏插入圖片描述

類一個方法對應一個棧幀,一個棧幀有
局部變量表,操作數幀,動態鏈接,方法出口信息;
局部變量包括八大基本類型,對象引用,返回地址(returnaddress);
一個線程對應建一個虛擬機棧,運行一個方法,則對應壓棧(虛擬機棧)一個棧幀,
運行結束後出棧(出虛擬機棧),所以正在運行的方法一定在棧頂部;
那麼,方法內部調用方法,則會先壓棧第一個方法後繼續壓棧第二個被調用的方法,
當前虛擬機棧就有2個棧幀,方法沒執行完所以不能出棧,以此類推,如果不斷的增加調用方法(調用方法深度很深),虛擬機能存的棧幀數量也有最大值,
當壓棧(增加棧幀),
超過虛擬機棧最大的數量 就會發生**StackOverflowError**

局部變量表:
存放局部變量
存放堆對象的引用(指針)
操作數棧:
運算也需要分配內存棧

存放對象

GC,
minor GC 15次後變 老年代
靜態變量,連接池等 不會清
Eden,survivor ,OLD
對象頭?
內存不夠時則會發生OOM

本地方法棧

native 修飾的本地方法運行用到的內存棧

方法區(元空間)

存放類信息,常量,靜態變量

程序計數器

計數器,是用記錄當前線程運行的行號,多線程運行的,
一個線程暫停後運行另外的線程再回到原來線程時根據計數器記錄的行號繼續原來的程序。

JVM可以分爲
共享區(出現OOM區域)
堆,方法區;

線程私有
虛擬機棧,本地方法棧,程序計數器
單線程:虛擬機棧,本地方法棧 可能出現StackOutflowError
多線程:虛擬機棧,本地方法棧 可能出現StackOutflowError ,OOM
程序計數器 ,無內存溢出異常

發佈了15 篇原創文章 · 獲贊 0 · 訪問量 369
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章