JVM
JVM指令
JVM指挥机器工作的指示和命令
常用指令:
javap -c demo.java
javap是 Java class文件分解器,可以反编译,也可以查看java编译器生成的字节码。用于分解class文件
-c 分解方法代码,即显示每个方法具体的字节码
JVM模型
- 类加载器
- 运行时数据区(Runtime Data Area)
- 方法区:存储虚拟机加载的类信息、常量、静态变量
- 堆:存储实例化对象,所有的对象都存储在堆中,所有的线程共享java堆,java内存结构中占比最大,同时是GC垃圾回收机制的主要管理区域;
可分为年轻代、老年代
- 栈(虚拟机栈):Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、
操作栈、动态链接、方法出口等信息;每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程
- 本地方法栈:执行本地方法(其他语言编写的方法),native修饰的方法,Object中的一些方法如getClass、hashcode、clone
- 程序计数器:记录当前线程执行的字节码的行号,多个线程的程序计数器时相互独立的
- 执行引擎
- 本地接口
- 本地库
类加载器将Class文件读取后,放到运行时数据区,然后执行引擎执行或调用本地接口、本地库