java虚拟机总共由5部分组成
1、虚拟机栈(VM Stacks)包含栈帧***是线程私有的***
虚拟机栈中执行每个方法时会创建一个栈帧用于储存局部变量表,操作数栈,动态链接,方法出口;每一个方法从调用到执行完毕的过程就对应着一个栈帧的虚拟机中从入栈(也叫压栈)到出栈的过程
2、本地方法栈(Native Method Stack)
当执行本地方法(储存在class文件中,执行快消耗低)的时候创建栈帧用于储存局部变量表,操作数栈,动态链接,方法出口等信息.(栗子:当调用System.gc()时会调用Object类中的finalize方法,这个方法就是底层方法)
3、方法区(Method Area (Non-Heap非堆内存))
用于储存被虚拟机加载的自定义的类信息、常量、静态变量、。
4、堆(Heap)
时java对象的储存区域,只要是使用new字段分配内存地址的实例都在堆中
5、PC寄存器(Program Counter Register)
就是程序计数器,用于指示下一条需要执行哪一行字节码文件,不会与其他线程共享
虚拟机栈与本地方法栈类似,区别在于操作的方法不同
ps:JVM过于深奥,待我过一阵再深入研究一波