主要的GC Roots有:
本地变量表中引用的对象
虚拟机栈中引用的对象
方法区中类静态属性引用的对象
方法区中常量引用的对象
本地方法栈中JNI引用的对象
通过以上GC Roots,垃圾回收器可以遍历整个...使用JDK自带的JVM监控工具jvisualvm查看内存情况,判断增长最快的区域以及对象。
使用Arthas等诊断工具,通过oom命令分析内存溢出时的堆栈信息。...标记-清除:标记出可达对象,之后清除未标记的对象,这会产生大量内存碎片。
标记-复制:将内存分为两块,每次只用其中一块。标记可达对象后,将存活对象复制到另一块内存,然后清除上一块内存。...标记-整理算法
标记-整理算法通过对象迁移的方式解决了标记-清除算法的内存碎片问题,其实现过程如下:
标记阶段:与标记-清除算法相同,标记出所有可达对象。...所以,标记-清除算法实现简单但会产生较多内存碎片,标记-整理算法实现相对复杂但可以有效解决内存碎片问题。理解两种算法的实现原理,有助于我们选择和调优合适的垃圾回收器,构建高性能的Java应用。