如上圖所示:為Java的各代分布圖年輕代(young) 分為3個區。一個Eden區,2個survivor區。大部分對象在Eden中生成。當Eden區滿時,還存活的對象將被復制到survivor區。當該survivor區滿時,此區的存活對象被復制到另外一個survivor區,當第2個survivor區也滿時,該區還存活的對象將被復制到年老區(tenured)。年老代(tenured) 存放從年輕代(young)復制過來的對象。持久代(perm) 用于存放靜態文件,如Java類、方法等。持久代對垃圾回收沒有顯著的影響,但是有些應用可能動態生成或者調用一些class。持久代大小通過-XX:MaxPermSize=N進行設置Thinking in java給java gc取了一個羅嗦的稱呼:“自適應、分代的、停止-復制、標記-掃描”式的垃圾回收器。導致Gc的情況:1、tenured被寫滿2、perm被寫滿3、System.gc()的顯式調用。4、上一次GC之后heap的各域分配策略動態變化。新聞熱點
疑難解答