使用jmap命令dump出内存镜像,通过MAT、Eclipse Memory Analyzer等工具分析对象关系,找到内存泄漏的对象。...标记-清除:标记出可达对象,之后清除未标记的对象,这会产生大量内存碎片。
标记-复制:将内存分为两块,每次只用其中一块。标记可达对象后,将存活对象复制到另一块内存,然后清除上一块内存。...标记-清除与标记-整理算法
标记-清除算法
标记-清除算法主要分为两个阶段:
标记阶段:从GC Roots开始对堆内存进行可达性分析,标记出所有可达对象。
清除阶段:清除未标记的对象,释放内存。...清除未标记的对象,实现内存回收。
可用内存变为未标记对象占用的内存空间。
该算法的主要缺点是会产生大量内存碎片,降低内存利用效率。...整理阶段:将所有存活对象向一端移动,然后清除端边界以外的内存。
设置一个指针,指向未清理的内存起始地址,作为下次分配内存时使用。
可用内存变为未标记对象占用的内存空间,没有产生内存碎片。