逃逸分析

做個(gè)筆記,參開其他資料學(xué)習(xí)一下,以下純屬個(gè)人見解,如有錯誤之處,歡迎討論和糾正。

參考資料

JVM的逃逸分析
深入分析JVM逃逸分析對性能的影響
對象并不一定都是在堆上分配內(nèi)存的

在思考一個(gè)問題,在Java中,所有的對象都是分配在堆上嗎?

jvm規(guī)范中,所有的對象都是分配上堆上面的。jvm規(guī)范是這么規(guī)定的,但是隨著JIT編譯技術(shù)的發(fā)展,具體的jvm實(shí)現(xiàn)存在一定的差異,會進(jìn)行一定的優(yōu)化。其中,就有通過“逃逸分析”技術(shù),Java Hotspot編譯器能夠分析出一個(gè)新的對象的引用的使用范圍從而決定是否要將這個(gè)對象分配到堆上。

在一些資料中,看到有這樣的理解。

  1. 因?yàn)镴ava本身的限制(對象只能分配到堆中),為了減少臨時(shí)對象在堆內(nèi)分配的數(shù)量,在一個(gè)方法體內(nèi)定義一個(gè)局部變量,并且該變量在方法執(zhí)行過程中未發(fā)生逃逸,按照J(rèn)VM調(diào)優(yōu)機(jī)制,首先會在堆內(nèi)存創(chuàng)建類的實(shí)例,然后將此對象的引用壓入調(diào)用棧,繼續(xù)執(zhí)行,這是JVM優(yōu)化前的方式。

  2. 采用逃逸分析對JVM進(jìn)行優(yōu)化。即針對棧的重新分配方式,首先找出未逃逸的變量,將該變量直接存到棧里,無需進(jìn)入堆,分配完成后,繼續(xù)調(diào)用棧內(nèi)執(zhí)行,最后線程執(zhí)行結(jié)束,??臻g被回收,局部變量也被回收了。如此操作,是優(yōu)化前在堆中,優(yōu)化后在棧中,從而減少了堆中對象的分配和銷毀,從而優(yōu)化性能。

上面幾篇都講的挺好的,這里就不多說啦。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ??我們都知道Java中的對象默認(rèn)都是分配到堆上,在調(diào)用棧中,只保存了對象的指針。當(dāng)對象不再使用后,需要依靠GC來...
    guoliang閱讀 666評論 0 1
  • 前言:最近在H大的公眾號學(xué)習(xí)了很多關(guān)于JVM相關(guān)的知識,本文為學(xué)習(xí)總結(jié),參考于公眾號:Hollis,原文標(biāo)題如下:...
    Vechace閱讀 1,415評論 1 8
  • 一、為什么“逃逸” 逃逸分析是指分析指針動態(tài)范圍 的方法:同編譯器優(yōu)化原理的指針分析和外形分析相關(guān)聯(lián)。當(dāng)變量(或者...
    hedgehog1112閱讀 934評論 1 1
  • 哈羅,自己!從今天起,好好讀書學(xué)習(xí),眼睛花了又怎樣,眼鏡會不離不棄。 哈羅,自己!從今天起,堅(jiān)持鍛煉身體,孩子將遠(yuǎn)...
    筠溪_w66f閱讀 165評論 0 5
  • (李玟 黃志峰)他走路的時(shí)候,總是抬頭、挺胸、直背,有一種不同的氣質(zhì)?!拔椰F(xiàn)在還是把自己當(dāng)成穿著便衣的軍人?!苯衲?..
    WYNNE玟大閱讀 248評論 0 0

友情鏈接更多精彩內(nèi)容