ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

垃圾回收细节

2026/9/18 5:41:55 拓冰建站 浏览量
垃圾回收细节

强引用:all的GCRoot对象都不通过强引用引用该对象

堆中对象

引用计数法

   被引用次数记录到对象头中,0次可回收

达性分析

   栈中引用的对象/方法区中类静态属性引用的对象/方法区常量引用的对象/本地方法栈引用的对象

算法:

   标记清除:可达性分析标记垃圾,碎皮 内存不连贯

   标记整理:gcroot标记垃圾,整理;

   复制:划分两块内存区域,使用率低

  分代回收:

    堆:新生代:老年代1:2

minorGC 新生代垃圾回收,暂定时间短

mixedGC新生代+老年代部分区域,G1收集器持有

fullGC新生代+老年代完整垃圾回收,暂停时间长,避免用到

垃圾回收器:

  串行:

     堆内存小,个人电脑,单线程 stw

     serial新生代复制算法;serial old老年代,标记整理算法

  并行:jdk8默认

    多个线程 stw

     paraller new新生代复制,parallel old老年代标记整理算法

  CMS并发 并发 标记-清除算法,老年代,最短回收停顿时间

G1:jdk9后默认

   多个区域,humongous储存大对象,复制算法无内存碎片

   新生代回收stw

   并发标记:老年代占用内存超45%触发,不需要暂停用户进程

   混合收集:重新标记阶段需要暂停用户线程,据暂停时间目标优先回收价值高的区域

调优工具

jps进程状态

jmap堆栈信息 

jstack 进程内推栈信息

jstat:统计监测工具,垃圾回收/类加载/新生代统计信息

jconsole:可视化工具

内存泄漏:

   虚拟机栈 stackoverflowerror ; 方法区元空间outofmemoryerror ; 堆 heap 

  jmap内存快照,启动命令行 - XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=

 cpu飙高

   top

   ps H -eo pid,tid,%cpu | grep pid 线程

   jstack pid 进程all线程  

   printf "%x\n" tid 转十六进制