程序计数器(线程私有):
特点:线程创建时创建,执行本地方法时其值为undefined。
虚拟机栈(线程私有):
特点:(栈内存)为虚拟机执行java方法服务:方法调用时创建栈帧-->局部变量表-->局部变量,对象引用
如果线程请求的栈深度超出了虚拟机锁允许的深度,就会出现StackOverFlowError。-Xss规定了栈的最大空间
虚拟机栈可以动态扩展,如果扩展到无法申请到足够的内存,会出现OOM。
本地方法栈(线程私有):
特点:java虚拟机栈是为虚拟机执行java方法服务的。而本地方法栈则为虚拟机执行使用到的Native方法服务。
java虚拟机没有对本地方法栈的使用和数据结构做轻质规定。SunHotSpot 把java虚拟机栈和本地方法栈合二为一。
会抛出StackOverFlowError和OutOfMemoryError
java堆,即内存堆(线程共享):
特点:被所有线程共享,在java虚拟机启动时创建,几乎所有的对象实例都放到堆中
GC的管理的主要区域
物理不连续。逻辑上连续,并可以动态扩展。无法扩展时抛出OutOfMemoryError
方法区(线程共享):
特点:用于存储已被虚拟机加载的类信息,常量。静态变量,即编译器编译后的代码的数据
SunHotSpot虚拟机把方法区叫做永久带
运行时常量池(方法区的一部分):
特点:受到方法区的限制,抛出OutOfMemoryError