日常记录——JVM—JVM简介、class文件解析
一、JVM简介 JVM :Java Virtual MAchine-Java虚拟机,可以将class文件解释为各种平台可执行的指令行,java中一个类在运行时,首先将java文件编译(javac)为class文件,然后jvm将class文件解释并执行。 JVM可分为三部分:类加载器(ClassLoader)系统、执行引擎、运行时数据区。 类加载器系统 :负责加载程序中的类和接口。 执行引擎 :解释执行+即时编译(JIT),开始对所有的代码都采取解释执行的方式,经常调用的热点方法编译为本地代码(热点代码频率设置-XX:CompileThreshould = 值(默认10000)),默认是解释执行+即时编译(-Xmixed)模式,可设置为纯解释(-Xint)或者纯编译(-Xcomp)模式,纯解释加载快,执行慢,纯编译加载慢,执行快。 运行时数据区 :程序计数器、本地方法栈、虚拟机栈、堆、方法区。 1.程序计数器:指向当前线程所执行的字节码的行号,线程私有。 2.本地方法栈:存储本地方法调用的状态,Native方法,线程私有。 3.虚拟机栈:存储局部变量表,操作数栈,动态链接,方法出口等信息,线程私有。 4.堆:虚拟机启动时创建,存放对象实例和数组,GC工作区域,线程共享。 5.方法区:存储类的信息,如常量(final)、静态变量(static)、JIT(即时编译器)编译后的代码