九、性能三
JVM 垃圾回收原理
定位垃圾算法有引用计数、根可达算法, 一般使用根可达算法来查找垃圾。
常见的垃圾回收算法有标记清除(mark sweep)、拷贝算法 (copying)、标记压缩(mark compact)。在堆分代模型中, 不同分代会使用不同垃圾回收算法。新生代会使用拷贝算法,回收速度快,老年代采用标记压缩算法,速度相对较慢。
新产生对象一般都放在新生代的 Eden 伊甸园区, 当空间不足时会触发 gc,将伊甸园区和其中一块 from 幸存区中存活对象拷贝至另一块空的 to 幸存区,然后直接将伊甸园区和 from 幸存区清空。当下次伊甸园区空间不足时,会将伊甸园区和其中一块幸存区中存活对象拷贝至另一块空的幸存区(from 区和 to 区来回倒换),如此循环往复经过多次 gc 后,to 幸存区内仍然存活的对象会被移动到老年代。老年代空间不足时会引发 fullgc,即对整个堆进行垃圾回收,由于老年代垃圾回收比较慢,会造成用户线程暂停时间较长、响应变慢,因此需要减少触发 fullgc 的频率。
评论