程序计数器
当前线程所执行的字节码的行号指示器
每个线程都有自己私有的计数器
native方法,计数器值为空
该内存区域没有规定任何的OutOfMemoryError情况
虚拟机栈
Java方法执行的内存模型,用于存储局部变量标、操作数栈、动态链接、方法出口等信息
虚拟机栈也是线程私有
局部变量表所需的内存控件在编译期完成分配
当线程请求的栈深度大于虚拟机所允许的深度,抛出StackOverflowError
当栈动态扩展时,无法申请到足够的内存,抛出OutOfMemoryError
本地方法栈
与虚拟机栈功能相似
虚拟机栈为Java方法服务而本地方法栈是为Native方法服务
Sun HotSpot虚拟机将本地方法栈和虚拟机栈合二为一,所以也会出现抛出Error的情况
堆
存储对象实例和数组
所有线程共享
方法区
存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据
所有线程共享
VM配置
-vmargs 表示后面的是VM参数
-Xms128m 表示JVM初始分配的堆内存
-Xmx512m 表示JVM最大允许分配的堆内存
-XX:PermSize=64M JVM初始化分配的非堆(方法区等)内存
-XX:MaxPermSize=128M JVM最大允许分配的非堆内存