参考:http://blog.csdn.net/jiangwei0910410003/article/details/40616223
类加载器子系统
内存空间:方法区,堆,栈,本地方法栈
垃圾收集器:
指令计数器以及其他隐含寄存器:
执行引擎
本地接口方法
本地方法库
一。程序计数器:较小块的内存空间,可以看做程序行号指示器。通过它区下一条需要执行的字节码指令。
分支,跳转,循环,异常处理,线程恢复等基础功能都需要这个计数器来完成。是线程私有的,每个线程都有一个程序计数器。
二。java栈(虚拟机栈):java栈就是java方法执行的内存模型。每个方法执行都会创建一个栈帧。用来存储局部变量表,操作数栈,
动态链接,方法出口等信息。每个方法从调用直至完成的过程,就对应一个栈帧在虚拟机栈中入栈到出栈的过程。(也是线程私有的)
异常可能性:栈深度大于允许的(StackOverFlowError),栈帧扩展无法申请到足够内存(OutOfMemmoryError)
局部变量表
操作数栈
方法返回地址(运到方法返回字节码指令,执行方法过程中运到了异常)
附加信息
三。本地方法栈(执行本地方法,线程私有。可能抛出两种异常)
四。java堆:在虚拟机启动时创建。存放对象实例。java堆是垃圾回收器管理的主要对象
堆是线程共享的。抛出outofmemmoryerror
五。方法区用于存储已被虚拟机加载的类信息,常量,静态常量。
和堆一样,是线程共享的。
运行时常量池:是方法区的一部分,
六。异常
-XX:PermSize=10M -XX:MaxPermSize=10M -Xss=128k -Xms 10M -Xmx 10M
堆溢出:
栈溢出
常量池溢出
方法区溢出