java虚拟机运行时数据区
1.程序计数器:当前县城之心工单而字节码的行号指示器;字节码解释器工作依赖于他; 线程私有;java方法记录的是正在执行的虚拟机字节码指令的地址;native计数器的值为空; 2.java虚拟机栈:线程私有,生命周期与线程相同;是java方法(字节码)执行的内存模型;每个方法执行对应创建一个栈帧,存储(程序员通常所说的栈),操作栈,动态链接,方法出口等; 局部变量表:内存大小在编译期间分配完成;运行期间不会变化; 局部变量空间slot:long,double占两个,其余占一个; 线程请求的栈深度大于虚拟机允许的抛出栈异常,栈扩展申请不到足够的内存会抛memory异常; 3.本地方法栈: 为虚拟机执行native方法服务;也会抛异常;对本地方法栈中的方法使用的语言,方式,数据结构没有强制规定; 4.java堆(GC) 所有线程共享;存放对象实例,以及数组;虚拟机启动时创建; 相关技术:JIT编译器发展,逃逸分析技术,栈上分配,标量替换优化技术; 是垃圾收集器主要管理区域,通过-xmx -xms进行扩展;物理上不一定连续但逻辑上连续的; 注释:由于现在收集器基本都是采用的分代收集算法,所以Java堆中还可以细分为:新生代和老年代;再细致一点的有Eden空间、From Survivor空间、To Survivor空间等。如果从内存分配的角度看