JVM 由三部分组成:类加载子系统、执行引擎、运行时数据区。
- 类加载子系统:可以根据指定的全限定名来载入类或接口;
- 执行引擎:负责执行那些包含在被载入类的方法中的指令;
- 当程序运行时,JVM 需要内存来存储很多内容,例如:字节码、对象、参数、返回值、局部变量、运算的中间结果,等等,JVM 会把这些东西都存储到运行时数据区中,以便于管理。而运行时数据区又可以分为方法区、堆、虚拟机栈、本地方法栈、程序计数器。运行时数据区是开发者重点要关注的部分,因为程序的运行与它密不可分,很多错误的排查也需要基于对运行时数据区的理解。在运行时数据区所包含的几块内存空间中,方法区和堆是线程之间共享的内存区域,而虚拟机栈、本地方法栈、程序计数器则是线程私有的区域,就是说每个线程都有自己的这个区域。