1、JVM内存区域划分
JVM(Java虚拟机):一个运行起来的Java进程,是进程,那必然就会从操作系统中申请内存。再把这些内存分区,干不同的事。分区有五种:方法区(元数据区),堆区,栈区,程序计数器,本地方法区(native)。
(1) 方法区(元数据区 1.8版本这样叫):存储的内容就是类对象。编译生成的.class文件,加载到内存后,就变成类对象了。即先编译生成.class文件,JVM执行.class文件过程中,就变成类对象。
(2) 堆区(Heap):存储的内容就是代码中new的对象,占据空间最大的区域。
(3) 栈区(Stack):存储的内容就是在代码执行过程中,方法之间的调用关系。在栈里,一个一个的元素被称为栈帧,每个栈帧就代表了一个方法调用,栈帧里就包含着这个方法的入口,方法返回的位置,方法的形参,方法的返回值,局部变量等等。栈帧进行出栈入栈的操作。
(4) 程序计数器:比较小的空间,主要就是存放一个"指令地址",表示下一条要执行的指令的地址。执行的指令是在方法区里的。即就是指令是在方法区中的,而指令的地址是在程序计数器中的。
编译生成.class文件的同时,类中的成员方法都会被编译成二进制的指令,并放到.class文件中。等到JVM执行该文件时,即类加载的时候,产生类对象,二进制指令也在类对象中。
刚开始调用方法,程序计数器记录的就是方法的入口的地址。随着一条一条的执行指令,每 执行一条,程序计数器的值都会自动更新。
(5)