
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虚拟机栈


栈帧

局部变量表





操作数栈

帧数据---动态链接

帧数据---方法出口

帧数据---异常表

内存溢出与虚拟机栈的大小设置


本地方法栈

堆



方法区











直接内存



自动垃圾回收器

方法区的回收



观察类被加载和卸载


堆回收

垃圾标记算法







几种对象引用













垃圾回收算法











垃圾回收器




























