垃圾回收细节
强引用: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 转十六进制
? ?
? ?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!