爱她就要先懂她jvm

Java文件经过编译器编程字节码文件,为了能让jvm读懂,jvm再去和操作系统交互。
爱她就要先懂她jvm
运行时数据区包括程序计数器,虚拟机栈,本地方法栈,堆,方法区
1.程序计数器能记录当前线程在做什么,下一条指令是什么,切换线程之后,能回到原来位置,是线程私有的,这个区域不会发生内存溢出的异常。
后续等待更新
2.java虚拟机栈:线程私有,生命周期与线程相同,每个方法被执行都会创建一个栈帧,栈帧中存储局部变量,对象引用,该区域会抛出两个异常,一个是线程请求的栈深度大于虚拟机允许的栈深度,例如方法的无线递归调用,一直入栈不出栈。另一个是内存溢出,无法申请到足够的内存。
3.本地方法栈。虚拟机栈为java方法服务 ,本地方法栈为虚拟机提供服务,hotspot虚拟机底层用c++写的。该区域也会抛两个异常,超出栈深度,内存溢出。
4.java堆,堆是线程共享的,虚拟机启动时创建,存放实例对象,也就是new的对象。java堆可以是物理上不连续的空间,java堆是垃圾回收主要回收的区域。
5.方法区。是线程共享的区域,存放类信息,常量,静态变量,人们常叫他永久代,垃圾回收的时候比较少。主要对线程池的回收和类的卸载,在jdk1.8以后,这个区域被叫做元空间,被直接内存管理,不被jvm管理了。