1. 程式人生 > >Jave虛擬機器劃分的三個代: 年輕代、年老代和持久代

Jave虛擬機器劃分的三個代: 年輕代、年老代和持久代

虛擬機器中的共劃分為三個代:         年輕代(Young Generation)、年老代(Old Generation)和持久代(Permanent  Generation)。其中持久代主要存放的是Java類的類資訊,與垃圾收集要收集的Java物件關係 不大。年輕代和年老代的劃分是對垃 圾收集影響比較大的。
  • 年輕代:
        所有新生成的物件首先都是放在年輕代的。年輕代的目標就是儘可能快速的收集掉那些生 命週期短的物件。年輕代分三個區。一個Eden區,兩個 Survivor區(一般而言)。大部分物件在 Eden區中生成。當Eden區滿時,還存活的物件將被複制到Survivor區(兩個中的一個),當這 個 Survivor區滿時,此區的存活物件將被複制到另外一個Survivor區,當這個Survivor去也滿了 的時候,從第一個Survivor區複製過來的並且此時還存活的物件,將被複制“年老區 (Tenured)”。需要注意,Survivor的兩個區是對稱的,沒先後關係,所以同一個區中可能同時 存在從Eden複製過來物件,和從前一個Survivor複製過來的物件,而複製到年老區的只有從第 一個Survivor去過來的物件。而且,Survivor區總有一個是空的。同時,根據程式需要, Survivor區是可以配置為多個的(多於兩個),這樣可以增加物件在年輕代中的存在時間,減 少被放到年老代的可能。
  • 年老代:
        在年輕代中經歷了N次垃圾回收後仍然存活的物件,就會被放到年老代中。因此,可以認 為年老代中存放的都是一些生命週期較長的物件。
  • 持久代: