一:JVM内存为什么要分成新生代,老年代,永久代(元空间)?

因为对象的生命周期不一样,有的对象生命周期很短,这样的对象会高频率的触发垃圾回收;有的对象生命周期比较长,就可以被低频率的垃圾回收。每一部分使用到的垃圾回收算法也会不同。所以JVM根据对象在内存中存活时间的长短,把堆内存分为新生代(包括一个Eden区、两个Survivor区)和老年代(Tenured或Old)。Perm代(永久代,Java 8开始被“元空间”取代)属于方法区了,而且仅在Full GC时被回收。
JVM(笔记2020-05-25)

二:新生代中为什么有两个Survivor区?为什么每次只使用其中一个呢?

这就跟新生代采用的垃圾回收算法有关,新生代用的是“复制”算法,复制算法的特点是(空间换时间)牺牲一定的空间成本,来换取高效率的垃圾回收,此算法不会产生内存碎片,回收后内存比较规整。

相关文章:

  • 2021-09-21
  • 2021-07-11
  • 2021-06-05
  • 2021-05-02
  • 2021-11-17
  • 2022-01-02
  • 2021-06-02
猜你喜欢
  • 2021-11-10
  • 2021-08-03
相关资源
相似解决方案