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)作。