JVM主要由四个部分组成:
- 类加载器:将class文件加载进jvm
- 执行引擎:执行class文件中的字节码指令
- 本地库接口:调用本地方法库
- 内存区/运行时数据区:
- 方法区:又称作non-heap非堆,主要用来存储类结构,包括常量池、运行时常量池、静态变量、构造函数等。
- 堆:主要存储java的实例、对象,也是GC发生的主要区域。
- 虚拟机栈:java栈,操作变量、操作栈、方法的返回值,一个方法从调用到执行结束的过程称为入栈和出栈。
- 本地方法栈:和java栈的作用一样,不过只为native方法服务。
- 程序计数器:用来记录当前程序执行的内存地址,用来在CPU切换线程时,能够回复程序运行的原状态。