目录
JVM组成部分
字节码
一般信息
常量池
方法
面试常见问题
查看字节码的工具
javap(适用于程序部署后)
jclasslib插件(适用于本地调试)
arthas(适用于程序处于运行中使用)
arthas的安装
查看 dashboard
dump查看字节码
jad查看原代码
类的生命周期
类加载
连接
验证
准备
解析
初始化
初始化的内容
触发类初始化的时机
不会触发初始化的情况
类加载器
类加载器的分类
使用arthas查看程序中类加载器的情况
启动类加载器
拓展类加载器与应用程序加载器
双亲委派机制
面试:类的双亲委派机制是什么?
打破双亲委派机制的三种方式
自定义类加载器编辑
线程上下文类加载器
使用阿里arthas不停机解决线上问题
JDK9后加载器的变化
运行时数据区
程序计数器
Java虚拟机栈
栈帧
局部变量表
操作数栈
帧数据---动态链接
帧数据---方法出口
帧数据---异常表
内存溢出与虚拟机栈的大小设置
本地方法栈
堆
方法区
intern()
直接内存
自动垃圾回收器
方法区的回收
堆回收
垃圾标记算法
几种对象引用
垃圾回收算法
垃圾回收器
底部
JVM组成部分
字节码
字节码文件的查看工具:https://github.com/ingokegel/jclasslib
一般信息
JDK与字节码版本不兼容报错异常如下:
常量池
方法
面试常见问题
i++时,i的值为0;而++1时,i的值为1
public class A {public static void main(String[] args) {int i = 0, j = 0, k = 0;i++;j = j + 1;k += 1;}
}
查看字节码的工具
javap(适用于程序部署后)
jclasslib插件(适用于本地调试)
arthas(适用于程序处于运行中使用)
下载 | arthas (aliyun.com)https://arthas.aliyun.com/doc/download.html
arthas的安装
安装请按照官方文档执行
快速入门 | arthas (aliyun.com)https://arthas.aliyun.com/doc/quick-start.html#_1-%E5%90%AF%E5%8A%A8-math-game
查看 dashboard
dashboard | arthas (aliyun.com)https://arthas.aliyun.com/doc/dashboard.html
dump查看字节码
jad查看原代码
类的生命周期
类加载
类加载器将类的信息加载到内存中,jvm在方法区和堆区各分配一个对象,用于保存类的信息
连接
验证
准备
解析
初始化
初始化的内容
触发类初始化的时机
不会触发初始化的情况
类加载器
类加载器的分类
使用arthas查看程序中类加载器的情况
启动类加载器
拓展类加载器与应用程序加载器
双亲委派机制
面试:类的双亲委派机制是什么?
打破双亲委派机制的三种方式
自定义类加载器
线程上下文类加载器
使用阿里arthas不停机解决线上问题
JDK9后加载器的变化
运行时数据区
程序计数器
Java虚拟机栈
栈帧
局部变量表
操作数栈
帧数据---动态链接
帧数据---方法出口
帧数据---异常表
内存溢出与虚拟机栈的大小设置
本地方法栈
堆
方法区
intern()
直接内存
自动垃圾回收器
方法区的回收
观察类被加载和卸载