堆內存內部結構


Jvm 堆內存內部結構

所有通過new創建的對象的內存都在堆中分配,其大小可以通過-Xmx-Xms來控制。堆被划分為新生代和老年代,新生代又被進一步划分為Eden(伊甸園)和Survivor幸存者)區,老年代,在后面不是堆區是永恆代(方法區),為了進一步了解堆內存里的結構,我們先看看后面要講的一種垃圾回收算法,分代算法,回收垃圾的過程,通過這個過程的分析,進一步了解堆區里的結構細節,結構圖如下所示:

當幸存對象的年齡到達某個值后,就會從年輕代進入老年代。

最后的永恆代,放常用庫文件和方法。

Edensurvivor的比例為81年輕代中的對象基本都是朝生夕死的(80%以上),老年代比年輕代內存大。如果老年代內存滿了,就會觸發major GC或者full GC。觸發full GC就會出現所謂的STWstop the world)現象。即所有的進程都掛起等待清理垃圾。

major GC是回收老年代的垃圾。Full GC是回收老年代和年輕代的垃圾。

JVM的垃圾回收器判定是否是垃圾數據的一般方法:

許多Java的垃圾收集器都使用了引用的根集GC Roots,作為分析對象存活與否的依據。引用的根集是正在執行的Java程序隨時都可以訪問引用的變量的集合——也就是存在堆棧或是靜態存儲空間上的引用變量。從這些根集變量出發可直接或是間接到達的對象,垃圾收集器會認為這些對象是生命尚存的對象;相對的從這些根集變量出發通過任意途徑都無法到達的對象,就是死亡的,它們就會成為下一次垃圾收集的對象。


免責聲明!

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



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