写点什么

JVM 垃圾回收性能分析

用户头像
积极&丧
关注
发布于: 2020 年 12 月 18 日
  • 垃圾回收 JVM垃圾回收就是将JVM堆中的已经不再被使用的对象清理掉,释放宝贵的内存资源。

  • 可达性分析算法 从线程栈帧中的局部变量,或者是方法区的静态变量出发,将这些变量引用的对象进行标记,然后看这些被标记的对象是否引用了其他对象,继续进行标记,所有被标记过得对象都是被使用的对象,而那些没有被标记的对象就是可以回收的垃圾对象。

  • 回收的三种方法

  • 清理 碎片区

  • 压缩

  • 负载

  • 代码垃圾回收

  • Eden区中对象满了字后,会进行标记,将标记还在使用的对象拷贝到from区,重复这个过程当from区满了之后,将from 区和Eden区中标记的对象拷贝到To区,这时候前面两个区都为空了。

  • 这个时候当Eden区中标记的对象满了后,Eden区中和To区的标记的对象会拷贝到From区。

  • 这个时候当Eden区中标记的对象满了后,会将Eden区中和From区标记的对象拷贝到To区

  • 来回几次后,生命周期比较长的对象不再来回拷贝,而是放到老年代中。

  • YOUNG GC

  • 新生代

  • FULL GC

  • 新生代

  • 老年代

JVM垃圾回收器算法

  • 串行回收器 单核cpu版本是单线程进行,其他线程都停止,回收完成后再运行,代价比较大。

  • 并行回收器 多个串行回收器但是还是会终止用户线程。

  • 并发回收器CMS

  • 初始标记

  • 并发标记

  • 重标记

  • 并发清理

  • 有点 大部分时间和用线程是并发执行的,用户线程停止时间很小。

  • G1 垃圾回收器

  • -XX:MaxGCPauseMillis 期望GC最大暂停时间 参考值 会动态调整

  • java启动参数

  • 标准参数

  • 运行模式 -server,-client

  • 类加载路径 -cp,-classpath

  • 运行调试 -verbose

  • 系统变量 -D

  • 非标准参数

  • -Xms 初始堆大小

  • -Xmx 最大堆大小

  • -Xmn 新生代大小

  • -Xss 线程堆栈大小

  • 非Stable参数 此类参数各个jvm实现会有所不同,将来可能会取消

  • -XX:-UseConcMarkSweeppGC启用CMS垃圾回收

  • JVM性能诊断工具

  • 基本工具:JPS,JSTAT,JMAP,JSTACK

  • 集成工具:JConsole,JVisualVM

  • JPS

  • -l 显示main class 的完整包

  • -v 显示相关参数设置

  • -q 显示pid

  • -m 输出传递给main 方法的参数

  • JSTAT

  • jdk轻量工具

  • 资源实时监控

  • JMAP

  • 输出所有内存中对象的工具,可以将VM中的heap,以二进制输出成文本。

  • 使用

  • jmap -histo pid>a.log 一段时间后再生成一个进行比较。GC回收了哪些对象。

  • jmap -dump:format=b,file=f1 PID 将进程中的heap输出到f1文件夹。

  • jstack

  • 查看线程堆栈信息



  • JConsole

  • JVisualVM

  • 更漂亮

用户头像

积极&丧

关注

还未添加个人签名 2019.02.13 加入

还未添加个人简介

评论

发布
暂无评论
JVM垃圾回收性能分析