1. 程式人生 > 其它 >新生代物件分配與回收過程

新生代物件分配與回收過程

                                                                                                                           

 物件分配過程:概述

  為新物件記憶體是一件非常嚴謹和複雜的任務,JVM的設計者不僅需要考慮記憶體如何分配,在哪裡分配等問題,並且由於記憶體分配演算法與記憶體回收演算法密切相關,所以還需要考慮GC執行完記憶體回收後是否會在記憶體空間中產生記憶體碎片。

  1,new的物件先放伊甸園區。此區有大小限制。

  2,當伊甸園的空間填滿時,程式又需要建立物件,JVM的垃圾回收器將對伊甸園區進行垃圾回收(GC),將伊甸園區中不再被其他物件所引用的物件進行銷燬。在載入新的物件放到伊甸園區

  3,然後將伊甸園中的剩餘物件移動到倖存者0區。

  4,如果再次觸發垃圾回收,此時上次倖存下來的放到倖存者0區的,如果沒有回收,就會放到倖存者1區。

  5,如果再次經歷垃圾回收,此時會重新放到倖存者0區,接著再去倖存者1區。

  6,啥時候能去養老區呢?可以設定次數。預設15次。

        可以設定引數:-XX:MaxTenuringThreshold=<N>進行設定。

  7,在養老區,相對悠閒。當養老區記憶體不足時,再次觸發GC:Major GC,進行養老區的記憶體清理。

  8,若養老區執行了Major GC之後發現依然無法進行物件的儲存,就會產生OOM異常。

      java.lang.OutOfMemoryError:Java heap space

總結:

 針對倖存者s0,s1區的總結:複雜之後交換,誰空誰to。

關於垃圾回收:頻繁在新生區收集,很少在養老區收集,幾乎不在永久區/元空間收集。