jvm區(qū)域總體分兩類(lèi),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ì)象)出來(lái)(new 出來(lái))后會(huì)在Eden Space(伊甸園)無(wú)憂無(wú)慮的生活,直到GC到來(lái)打破了他們平靜的生活。GC會(huì)逐一問(wèn)清楚每個(gè)對(duì)象的情況,有沒(méi)有錢(qián)(此對(duì)象的引用)啊,因?yàn)镚C想賺錢(qián)呀,有錢(qián)的才可以敲詐嘛。然后富人就會(huì)進(jìn)入Survivor Space(幸存者區(qū)),窮人的就直接kill掉。
2、并不是進(jìn)入Survivor Space(幸存者區(qū))后就保證人身是安全的,但至少可以活段時(shí)間。GC會(huì)定期(可以自定義)會(huì)對(duì)這些人進(jìn)行敲詐,億萬(wàn)富翁每次都給錢(qián),GC很滿意,就讓其進(jìn)入了Genured Gen(養(yǎng)老區(qū))。萬(wàn)元戶經(jīng)不住幾次敲詐就沒(méi)錢(qián)了,GC看沒(méi)有啥價(jià)值啦,就直接kill掉了。
3、進(jìn)入到養(yǎng)老區(qū)的人基本就可以保證人身安全啦,但是億萬(wàn)富豪有的也會(huì)揮霍成窮光蛋,只要錢(qián)沒(méi)了,GC還是kill掉。
分區(qū)的目的:新生區(qū)由于對(duì)象產(chǎn)生的比較多并且大都是朝生夕滅的,所以直接采用標(biāo)記-清理算法。而養(yǎng)老區(qū)生命力很強(qiáng),則采用復(fù)制算法,針對(duì)不同情況使用不同算法。
非heap區(qū)域中Perm Gen中放著類(lèi)、方法的定義,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
SUN的jvm內(nèi)存池被劃分為以下幾個(gè)部分:
Eden Space (heap)
內(nèi)存最初從這個(gè)線程池分配給大部分對(duì)象。
Survivor Space (heap)
用于保存在eden space內(nèi)存池中經(jīng)過(guò)垃圾回收后沒(méi)有被回收的對(duì)象。
Tenured Generation (heap)
用于保持已經(jīng)在survivor space內(nèi)存池中存在了一段時(shí)間的對(duì)象。
Permanent Generation (non-heap)
保存虛擬機(jī)自己的靜態(tài)(reflective)數(shù)據(jù),例如類(lèi)(class)和方法(method)對(duì)象。Java虛擬機(jī)共享這些類(lèi)數(shù)據(jù)。這個(gè)區(qū)域被分割為只讀的和只寫(xiě)的。
Code Cache (non-heap)
HotSpot Java虛擬機(jī)包括一個(gè)用于編譯和保存本地代碼(native code)的內(nèi)存,叫做“代碼緩存區(qū)”(code cache)。
簡(jiǎn)單來(lái)講,jvm的內(nèi)存回收過(guò)程是這樣的:
對(duì)象在Eden Space創(chuàng)建,當(dāng)Eden Space滿了的時(shí)候,gc就把所有在Eden Space中的對(duì)象掃描一次,把所有有效的對(duì)象復(fù)制到第一個(gè)Survivor Space,同時(shí)把無(wú)效的對(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ì)象就是長(zhǎng)期存在的,此時(shí)這些對(duì)象將被復(fù)制到Permanent Generation。
若垃圾收集器依據(jù)這種小幅度的調(diào)整收集不能騰出足夠的空間,就會(huì)運(yùn)行Full GC,此時(shí)jvm gc停止所有在堆中運(yùn)行的線程并執(zhí)行清除動(dòng)作。
聯(lián)系客服