【深入理解Java 虚拟机】学习笔记一

目录

  • 运行时数据区域
  • 根索引算法
  • 垃圾回收算法
  • 垃圾收集器
  • 双亲委派模型
  • JDK命令行工具Jstack 和 JConsole

1、运行时数据区域

线程共享:方法区、堆

线程私有:虚拟机栈、本地方法栈、程序计数器

2、根索引算法

Java 使用GC Roots 对象作为起点,从这些节点开始向下搜索,搜索所走过的路径为引用链,当一个对象到GC Roots 没有任何引用链则证明此对象是不可用的。

GC Roots 对象为:

  • 方法区中静态属性引用的对象
  • 方法区中常量引用的对象
  • 虚拟机栈中栈帧中的本地变量表引用的对象
  • 本地方法栈中JNI 引用的对象

3、垃圾回收算法

  1. 标记-清除算法  
  2. 复制算法
  3. 标记-整理算法
  4. 分代收集算法

4、垃圾收集器

  1. Serial 收集器,单线程,client模式下新生代默认使用,新生代使用复制算法,老年代使用标记-整理算法。
  2. ParNew 收集器,serial 的多线程版,server模式下新生代默认使用, 新生代使用复制算法,老年代使用标记-整理算法。
  3. ParallScavenge 收集器,类似ParNew,关注吞吐量,停顿时间与吞吐量矛盾的,不能兼顾。
  4. CMS 收集器,关注最短回收停顿时间,有并发操作,应用互联网应用。
  5. G1 收集器,较为成功的收集器,在指定停顿时间中,根据优先级回收,优点不会产生大量碎片,降低GC频率。

5、双亲委派模型

如果一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类,而是将这个请求委派给父类加载器去完成,每个层次类加载器如此,即传到顶层的启动类加载器。若父类加载器反馈自己无法完成这个加载请求,则子加载器才会尝试加载。

模型好处:

  • 类加载有优先级
  • 保证程序稳定

6、JDK命令行工具Jstack 和 JConsole

jstack 命令生成虚拟机当前时刻的线程快照,线程快照又称 thread dump  , 或 javacore 文件

jconsole 可视化工具,可以查看内存、线程、类、vm摘要、MBean

猜你喜欢

转载自blog.csdn.net/py_tamir/article/details/82693235