JVM物件逃逸分析 JVM記憶體

2022-01-26 12:31:14 字數 977 閱讀 5959

jvm的執行模式有三種:

解釋模式(interpreted mode):只使用直譯器(-xint  強制jvm使用解釋模式),執行一行jvm位元組碼就編譯一行為機器碼 編譯模式(compiled mode):只使用編譯器(-xcomp  jvm使用編譯模式),先將所有jvm位元組碼一次編譯為機器碼,然 後一次性執行所有機器碼

混合模式(mixed mode):依然使用解釋模式執行**,但是對於一些 "熱點" **採用編譯模式執行,jvm一般採用混合模 式執行** 解釋模式啟動快,對於只需要執行部分**,並且大多數**只會執行一次的情況比較適合;編譯模式啟動慢,但是後期執行速度快,而 且比較占用記憶體,因為機器碼的數量至少是jvm位元組碼的十倍以上,這種模式適合**可能會被反覆執行的場景;混合模式是jvm預設採 用的執行**方式,一開始還是解釋執行,但是對於少部分 「熱點 」**會採用編譯模式執行,這些熱點**對應的機器碼會被快取起 來,下次再執行無需再編譯,這就是我們常見的jit(just in time compiler)即時編譯技術。 在即時編譯過程中jvm可能會對我們的**最一些優化,比如物件逃逸分析等

物件逃逸分析:就是分析物件動態作用域,當乙個物件在方法中被定義後,它可能被外部方法所引用,例如作為呼叫引數傳遞到其他地方 中。

很顯然test1方法中的user物件被返回了,這個物件的作用域範圍不確定,test2方法中的user物件我們可以確定當方法結束這個物件就可 以認為是無效物件了,對於這樣的物件我們其實可以將其分配的棧記憶體裡,讓其在方法結束時跟隨棧記憶體一起被**掉。 jvm對於這種情況可以通過開啟逃逸分析引數(-xx:+doescapeanalysis)來優化物件記憶體分配位置,jdk7之後預設開啟逃逸分析,如果要 關閉使用引數(-xx:-doescapeanalysis)

JVM逃逸分析,作用及實戰案例

逃逸分析是分析指標可以儲存的所有地方,用於判斷指標是否能確保在當前執行緒。我理解的就是用來分析,乙個物件是否僅在某個執行緒被訪問到。在jit時,進行逃逸分析後,就可以確定物件僅在某一線程中被訪問到,這樣jit就可以對其方法進行優化。包括 1.堆分配轉化為棧分配 2.鎖消除 3.分離物件或標量替換 具...

jvm記憶體分析命令

top hp 47005 jstat gcutil 47005 統計gc資訊 jmap dump live,file a.map 47005 jmap histo 47005 比較簡單的各個有多少個物件佔了多少記憶體的資訊 jmap heap 47005 列印heap的概要資訊,gc使用的演算法,h...

JVM 記憶體物件管理

先來看一下 jvm 管理的記憶體圖 程式計數器 它是一塊較小的記憶體空間,它的作用可以看做是當先執行緒所執行的位元組碼的訊號指示器。每一條jvm執行緒都有自己的pc暫存器,各條執行緒之間互不影響,獨立儲存,這類記憶體區域被稱為 執行緒私有 記憶體 此記憶體區域是唯一乙個在j a虛擬機器規範中沒有規定...