JVM体系结构如下图所示:
JVM大致可以分为五大模块:
- 类加载子系统(Class Loader SubSystem)
- 运行时数据区(Runtime Data Area)
- 执行引擎(Execution Engine)
- Java本地接口(Java Native Interface 即JNI)
- 垃圾回收(Garbage Collection)
下面来个彩色的简图:
运行时数据区(Runtime Area)共分为方法区(Method Area)、堆(Heap)、栈(Stack)、本地方法栈(Native Method Stack)和程序计数器(Program Counter Register,有的人也称为PC寄存器,PC Register)。
方法区是一种特殊的堆,而方法区和堆它们两个也叫线程共享区,Java中产生的垃圾基本上都在这个共享区,所以GC会对此共享区的垃圾进行回收。所以我们通常所说的垃圾回收和JVM性能调优大部分是针对于堆的。
栈、本地方法栈和程序计数器三个组成的区域称为线程私有区域,也叫做线程独占区,此区域基本上不会产生垃圾。
栈里面是函数执行的地方,程序入口即main函数会首先进入栈中,main函数在栈的最底层,每执行一个函数就会把函数压进栈中,执行完之后栈就会把函数弹出去。
完结!