JVM调优-基础知识

JVM调优-基础知识

1.如何定位垃圾

  1. 引用计数:引用计数是如果一个对象有引用存在,计数器加一,如果计数为0,则认为是垃圾。这种方法有个问题,无法标记循环引用的一团垃圾。
  2. 可达性分析:从跟对象开始搜索,能够触达的对象不是垃圾。
那么什么是 根对象 (GCroot)
  • 线程栈变量:main方法中的能访问的对象
  • 静态变量:class静态变量初始化,能访问的对象
  • 常量池
  • JNI指针:native对象

2.清除垃圾的三个常用算法

  1. Mark-Sweep 标记清除
  2. Copying 拷贝
  3. Mark-Compact 标记压缩
三种算法的特点
  1. Mark-Sweep 标记清除 ,会产生碎片化内存空间
  2. Copying 拷贝,浪费一部分空间
  3. Mark-Compact 标记压缩,效率更低

3.堆内存的分代模型与对象空间分配过程

分代就是对象可以在新生代,或者老年代。这个分代即可以是逻辑分代,也可以是物理分代。
不同垃圾回收器,有不同的分代策略。

G1是逻辑分代,G1之前的都是逻辑+物理分代 ,ZGC ,Epsilon等等不分代。
JVM调优-基础知识

新生代分为:Eden 和 from区,to区(copy算法)8:1:1

JVM调优-基础知识

对象分配空间的过程

  1. 栈上分配
  2. TLAB本地分配
  3. 新生代到老年代

4.常用的垃圾回收器

JVM调优-基础知识

几个常见分组
  • Serial + Serial Old:最早的垃圾回收组合,单线程,适合小内存
  • ParNew + CMS + Serial Old:CMS是里程碑,实现了并发清理
  • Ps + Po:jdk8默认的回收组合,多线程
  • G1:jdk9以后默认的垃圾回收,jdk8也可以使用,推荐。大内存使用
  • ZGC:比较新,不了解。