JVM内存分代策略

堆内存一般分为几块:新生代,老年代和永久代。是垃圾回收最频繁的区域。

分代的意义?

给堆内存分代为了提高对象分配内存和垃圾回收的效率。

如果堆内存没有划分区域,所有新创建的对象需要和生命周期很长的对象放在一起,(内存地址是连续的)。
随着程序的运行,堆内存需要频繁的进行垃圾收集,每次回收都需要遍历所有的对象,遍历花费的时间代价过大,
严重影响GC效率。

  • 新生代: 新创建的对象 频繁GC
  • 老年代: 经过多次回收仍存活下来的对象 (GC频率低)
  • 永久代: 静态属性、类信息等 (一般不回收)

根据不同的区域(代),采用不同的垃圾回收算法。分代收集大大提升了收集效率。

永久代是HotSpot中的概念。

    young             old         permanent
      |
Eden   From   To
伊甸园  |     |
           Survivor Spaces(幸存空间)

`