从垃圾收集(GC)的角度来看,JVM的堆内存如何分区?

从垃圾收集(Garbage Collection,GC)的角度看,Java堆(Heap)主要被划分为以下几个区域:

  1. 新生代(Young Generation):新生代是存放新创建的对象的地方。新生代又被分为三个部分:一个Eden区和两个Survivor区(Survivor 0和Survivor 1)。大部分情况下,新创建的对象首先被分配到Eden区。

  2. 老年代(Old Generation):当对象在新生代中存活时间较长,或者Survivor区无法容纳的时候,就会被移动到老年代。老年代的空间一般比新生代大,用于存放生命周期较长的对象。

  3. 持久代(Permanent Generation)或元空间(Metaspace):这部分内存主要用于存放JVM加载的类信息、常量、静态变量等数据。在Java 8中,持久代被废弃,改为使用元空间,元空间使用的是本地内存。

JVM的垃圾收集器主要根据对象所在的区域进行垃圾回收。新生代中的垃圾收集称为Minor GC,这种垃圾收集的频率较高,但每次收集的时间较短。老年代中的垃圾收集称为Major GC或Full GC,这种垃圾收集的频率较低,但每次收集的时间较长,可能会导致应用的暂停。

总的来说,从GC的角度看,Java堆主要被划分为新生代、老年代和持久代(或元空间),不同的区域对应不同的垃圾收集策略。

发表评论

后才能评论