目录
- 运行时数据区域
- 根索引算法
- 垃圾回收算法
- 垃圾收集器
- 双亲委派模型
- JDK命令行工具Jstack 和 JConsole
1、运行时数据区域
线程共享:方法区、堆
线程私有:虚拟机栈、本地方法栈、程序计数器
2、根索引算法
Java 使用GC Roots 对象作为起点,从这些节点开始向下搜索,搜索所走过的路径为引用链,当一个对象到GC Roots 没有任何引用链则证明此对象是不可用的。
GC Roots 对象为:
- 方法区中静态属性引用的对象
- 方法区中常量引用的对象
- 虚拟机栈中栈帧中的本地变量表引用的对象
- 本地方法栈中JNI 引用的对象
3、垃圾回收算法
- 标记-清除算法
- 复制算法
- 标记-整理算法
- 分代收集算法
4、垃圾收集器
- Serial 收集器,单线程,client模式下新生代默认使用,新生代使用复制算法,老年代使用标记-整理算法。
- ParNew 收集器,serial 的多线程版,server模式下新生代默认使用, 新生代使用复制算法,老年代使用标记-整理算法。
- ParallScavenge 收集器,类似ParNew,关注吞吐量,停顿时间与吞吐量矛盾的,不能兼顾。
- CMS 收集器,关注最短回收停顿时间,有并发操作,应用互联网应用。
- G1 收集器,较为成功的收集器,在指定停顿时间中,根据优先级回收,优点不会产生大量碎片,降低GC频率。
5、双亲委派模型
如果一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类,而是将这个请求委派给父类加载器去完成,每个层次类加载器如此,即传到顶层的启动类加载器。若父类加载器反馈自己无法完成这个加载请求,则子加载器才会尝试加载。
模型好处:
- 类加载有优先级
- 保证程序稳定
6、JDK命令行工具Jstack 和 JConsole
jstack 命令生成虚拟机当前时刻的线程快照,线程快照又称 thread dump , 或 javacore 文件
jconsole 可视化工具,可以查看内存、线程、类、vm摘要、MBean