0%

Java内存--GC分代

作为Java程序员,很容易喜爱垃圾回收(garbage collection),无需自己释放内存。然而GC行为的基本内存模型是什么?其中,又有很多的概念,像young generation, old generation以及permanent generation,并且她们之间又回产生怎样的交互呢?

本文试图解决上述问题。下面将以最为浅显直接的图示来说明这几部分之间的关系。

# JVM内存组成

JVM内存由两部分组成: heap(堆空间)+ non-heap(非堆空间)

# Heap堆空间的组成

Heap堆空间分为young区和old区,其具体的组成结构关系如下图所示。
Figure1: Heap堆空间的结构

从上图中,我们可以看出,Heap空间主要分为young区和old区,而其中young区由Eden Generation,Survivor Generation(多个)组成; 其中old区则由tenured generation组成。

并且,对象在这三个代中的流动时机也在图中有所表示。首先,当Eden Generation达到阈值,则会触发minor gc,如果对象依然有引用,则会被迁移到其中一个Survivor Generation中;如果对象在Survivor Generation中生存的时间足够长,则会被迁移到tenured generation中。

Figure2: minor gc, major gc, full gc

未完待续…