JVM虚拟机内存

JVM虚拟机内存
1.程序计数器:
可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,循环,跳转,异常处理,线程恢复等基础功能都需要依赖这个计数器来完成。
2.Java虚拟机栈
线程私有。生命周期与线程保持一致。虚拟机栈描述的是Java方法执行的内存模型,即每个方法的局部变量表,操作数栈,动态链接,方法出口灯信息。每一个方法对应一个栈帧,注意是方法(易与方法区搞混淆)。
会抛出*Error(栈溢出)和OutOfMemoryError(内存溢出)异常。
3.本地方法栈
本地方法栈也是以方法为对象,但是他是针对于Native方法服务的。
会抛出*Error(栈溢出)和OutOfMemoryError(内存溢出)异常。
4.Java堆
所有线程共享,虚拟机启动则创建。是Java虚拟机中所管理的内存中的最大的一块。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这里也是发生GC(垃圾回收)的主要区域(方法区也可能发生)。
注:垃圾回收机制中又可分为新生代和老生代,默认为2:1(不太确定,推荐百度下)
5.方法区
各个线程共享,用于存储已被虚拟机加载的类信息,常量,静态变量。注意,他所关注的对象是一整个类(虽然不知道为啥叫方法区,容易混淆)
6.运行时常量池
是方法区的一部分,用于存放编译期生存的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池存放。