JVM對象逃逸分析-JVM內存


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)


免責聲明!

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



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