JVM可以分为3大部分:类加载器,运行时数据区和执行引擎。
类加载器负责加载.class 文件
运行时数据区负责存放.class 文件,分配内存。运行时数据区又分为5个部分:
- 方法区:负责存放.class 文件,方法区里有一块区域是运行时常量池,用来存放程序的常量。
- 堆:分配给对象的内存空间。
- java虚拟机栈:每个线程独享的内存空间。
- 本地方法栈:本地方法独享的内存空间。
- 程序计数器:记录线程执行的位置,方便线程切换后再次执行。
执行引擎:.class文件是jvm的一套指令集规范,并不能直接交个底层操作系统去执行,因此需要特定的命令解析器 执行引擎(Execution Engine) 将字节码翻译成底层系统指令再交由CPU去执行,
JVM内存模型