<span style="font-size: inherit;">2.java虚拟机栈(线程私有)--数据结构为</span><font color="#c41230" style="font-size: inherit;">栈帧</font><br>
生命周期与当前线程相同
描述java方法执行的线程内存模型,<font color="#c41230">每个方法执行,都会创建一个虚拟机栈</font>,用来存储局部变量表,操作数,动态连接,方法出口等。执行流程就相当于一个入栈到出栈的过程
局部变量表
存放了各种已知的基本数据类型,对象引用指针或者是对象访问句柄
线程所请求的栈大于虚拟机设置的栈的深处,会抛出stackoverflowException
如果栈允许动态扩容,当栈扩展到无法申请所需的内存时,则会抛出outofMemoryException错误
3.本地方法栈
与java虚拟栈功能类似,只不过调用的是本地的方法,不收虚拟机限制
同2一样也会出现同样异常
4.java堆(所有线程共用数据)
<font color="#c41230">jdk1.7以上将 字符串常量池和class和静态变量放置在了堆中</font>
5.方法区(线程共用)
运行时常量池
存放各种已知定义类版本,字段,方法,接口等描述信息
常量池表,存放编译器生成的各种字面量和符号引用