对于JVM自身的物理结构,我们可以从下图鸟瞰一下:
JVM内存组成结构
JVM栈由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示:
1)堆
所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由From Space和To Space组成。用如下图表示:新生代(Young)+老年代(Old)
2)栈
每个线程执行每个方法的时候都会在栈中申请一个栈帧,每个栈帧包括局部变量区和操作数栈,用于存放此次方法调用过程中的临时变量、参数和中间结果。栈大小由Xss来调节,默认为128K,方法调用层次太多会撑爆这个区域。
3)本地方法栈
用于支持native方法的执行,存储了每个native方法调用的状态。
4)方法区
即人们所说的非堆内存 或者叫永久代,存放要加载的类信息、静态变量、final类型的常量、属性和方法信息。JVM用持久代(Permanet Generation)来存放方法区,可通过-XX:PermSize和-XX:MaxPermSize来指定最小值和最大值。
本文转自:http://blog.csdn.net/cutesource/article/details/5906705