Java基礎學習備忘錄(連載之:JVM中的三代)

本文已收錄至個人我的博客,歡迎交流:www.swaggyhang.com/對象

Java虛擬機(JVM)中劃分爲三個代:

  • 年輕代(Young Generation)
    • 全部新生成的對象首先都是放在年輕代的。
    • 目標:儘量快速的收集掉那些生命週期短的對象。
    • 年輕代分三個區
      • 一個Eden區,兩個Survivor區(通常而言)。
      • 大部分對象在Eden區中生成。
      • 當Eden區滿時,還存活的對象將被複制到Survivor區(兩個中的一個)。
      • 當這個Survivor區滿時,此區的存活對象將被複制到另一個Survivor區,當這個Survivor去也滿了的時候,從第一個Survivor區複製過來的而且此時還存活的對象,將被複制「年老區(Tenured)」。
      • Survivor的兩個區是對稱的,沒前後關係,因此同一個區中可能同時存在從Eden複製過來對象,和從前一個Survivor複製過來的對象,而複製到年老區的只有從第一個Survivor去過來的對象。
      • Survivor區總有一個是空的。
      • Survivor區是能夠配置爲多個的(多於兩個),這樣可增長對象在年輕代中的存在時間,減小被放到年老代的可能。
  • 年老代(Old Generation)
    • 在年輕代中經歷了N次垃圾回收後仍然存活的對象,就會被放到年老代中。
    • 可認爲年老代中存放的都是一些生命週期較長的對象。
  • 持久代(Permanent Generation)。
    • 用於存放靜態文件,如:Java類、方法等。
    • 持久代對垃圾回收沒有顯著影響。
  • 總結:
    • 持久代主要存放的是Java類的類信息,與垃圾收集要收集的Java對象關係不大。
    • 年輕代和年老代的劃分是對垃圾收集影響比較大的。
相關文章
相關標籤/搜索