##JVM內(nèi)存區(qū)域劃分Eden Space、Survivor Space、Tenured Gen,Perm Gen解釋

JVM內(nèi)存區(qū)域劃分Eden Space、Survivor Space、Tenured Gen,Perm Gen解釋-jerry_ye-ChinaUnix博客 http://blog.chinaunix.net/xmlrpc.php?id=4616836&r=blog/article&uid=29632145

jvm區(qū)域總體分兩類,heap區(qū)和非heap區(qū)。heap區(qū)又分:Eden Space(伊甸園)、Survivor Space(幸存者區(qū))、Tenured Gen(老年代-養(yǎng)老區(qū))。 非heap區(qū)又分:Code Cache(代碼緩存區(qū))、Perm Gen(永久代)、Jvm Stack(java虛擬機(jī)棧)、Local Method Statck(本地方法棧)。
HotSpot虛擬機(jī)GC算法采用分代收集算法:
1、一個(gè)人(對(duì)象)出來(new 出來)后會(huì)在Eden Space(伊甸園)無憂無慮的生活,直到GC到來打破了他們平靜的生活。GC會(huì)逐一問清楚每個(gè)對(duì)象的情況,有沒有錢(此對(duì)象的引用)啊,因?yàn)镚C想賺錢呀,有錢的才可以敲詐嘛。然后富人就會(huì)進(jìn)入Survivor Space(幸存者區(qū)),窮人的就直接kill掉。
2、并不是進(jìn)入Survivor Space(幸存者區(qū))后就保證人身是安全的,但至少可以活段時(shí)間。GC會(huì)定期(可以自定義)會(huì)對(duì)這些人進(jìn)行敲詐,億萬富翁每次都給錢,GC很滿意,就讓其進(jìn)入了Genured Gen(養(yǎng)老區(qū))。萬元戶經(jīng)不住幾次敲詐就沒錢了,GC看沒有啥價(jià)值啦,就直接kill掉了。
3、進(jìn)入到養(yǎng)老區(qū)的人基本就可以保證人身安全啦,但是億萬富豪有的也會(huì)揮霍成窮光蛋,只要錢沒了,GC還是kill掉。
分區(qū)的目的:新生區(qū)由于對(duì)象產(chǎn)生的比較多并且大都是朝生夕滅的,所以直接采用標(biāo)記-清理算法。而養(yǎng)老區(qū)生命力很強(qiáng),則采用復(fù)制算法,針對(duì)不同情況使用不同算法。
非heap區(qū)域中Perm Gen中放著類、方法的定義,jvm Stack區(qū)域放著方法參數(shù)、局域變量等的引用,方法執(zhí)行順序按照棧的先入后出方式。
以上轉(zhuǎn)自:http://lhc1986.iteye.com/blog/1421832
以下轉(zhuǎn)自:http://www.cnblogs.com/xhr8334/archive/2011/12/01/2270994.html
GC工作機(jī)制
SUN的jvm內(nèi)存池被劃分為以下幾個(gè)部分:
Eden**** Space (heap)
內(nèi)存最初從這個(gè)線程池分配給大部分對(duì)象。

Survivor Space (heap)
用于保存在eden space內(nèi)存池中經(jīng)過垃圾回收后沒有被回收的對(duì)象。

Tenured Generation (heap)
用于保持已經(jīng)在survivor space內(nèi)存池中存在了一段時(shí)間的對(duì)象。

Permanent Generation (non-heap)
保存虛擬機(jī)自己的靜態(tài)(reflective)數(shù)據(jù),例如類(class)和方法(method)對(duì)象。Java虛擬機(jī)共享這些類數(shù)據(jù)。這個(gè)區(qū)域被分割為只讀的和只寫的。

Code Cache (non-heap)
HotSpot Java虛擬機(jī)包括一個(gè)用于編譯和保存本地代碼(native code)的內(nèi)存,叫做“代碼緩存區(qū)”(code cache)。

簡單來講,jvm的內(nèi)存回收過程是這樣的:
對(duì)象在Eden Space創(chuàng)建,當(dāng)Eden Space滿了的時(shí)候,gc就把所有在Eden Space中的對(duì)象掃描一次,把所有有效的對(duì)象復(fù)制到第一個(gè)Survivor Space,同時(shí)把無效的對(duì)象所占用的空間釋放。當(dāng)Eden Space再次變滿了的時(shí)候,就啟動(dòng)移動(dòng)程序把Eden Space中有效的對(duì)象復(fù)制到第二個(gè)Survivor Space,同時(shí),也將第一個(gè)Survivor Space中的有效對(duì)象復(fù)制到第二個(gè)Survivor Space。如果填充到第二個(gè)Survivor Space中的有效對(duì)象被第一個(gè)Survivor Space或Eden Space中的對(duì)象引用,那么這些對(duì)象就是長期存在的,此時(shí)這些對(duì)象將被復(fù)制到Permanent Generation。
若垃圾收集器依據(jù)這種小幅度的調(diào)整收集不能騰出足夠的空間,就會(huì)運(yùn)行Full GC,此時(shí)jvm gc停止所有在堆中運(yùn)行的線程并執(zhí)行清除動(dòng)作。

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

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

  • 1.一些概念 1.1.數(shù)據(jù)類型 Java虛擬機(jī)中,數(shù)據(jù)類型可以分為兩類:基本類型和引用類型?;绢愋偷淖兞勘4嬖?..
    落落落落大大方方閱讀 4,816評(píng)論 4 86
  • 轉(zhuǎn)載blog.csdn.net/ning109314/article/details/10411495/ JVM工...
    forever_smile閱讀 5,507評(píng)論 1 56
  • 原文閱讀 前言 這段時(shí)間懈怠了,罪過! 最近看到有同事也開始用上了微信公眾號(hào)寫博客了,挺好的~給他們點(diǎn)贊,這博客我...
    碼農(nóng)戲碼閱讀 6,152評(píng)論 2 31
  • JVM內(nèi)存模型Java虛擬機(jī)(Java Virtual Machine=JVM)的內(nèi)存空間分為五個(gè)部分,分別是: ...
    光劍書架上的書閱讀 2,775評(píng)論 2 26
  • 介紹JVM中7個(gè)區(qū)域,然后把每個(gè)區(qū)域可能造成內(nèi)存的溢出的情況說明 程序計(jì)數(shù)器:看做當(dāng)前線程所執(zhí)行的字節(jié)碼行號(hào)指示器...
    jemmm閱讀 2,305評(píng)論 0 9

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