JVM的内存结构
先上一副网图说明JVM内存布局:
JVM的内存结构主要有三大块:堆内存、方法区和栈。
堆由年轻代和和老年代组成,而年轻代又分成三个部分,Eden空间、From Survivor空间、To Survivor空间,默认情况下,年轻代按照8:1:1的比例来分配。
对于这些内存空间的大小,可通过一些虚拟机命令进行控制:
-Xms设置堆的最小空间大小。
-Xmx设置堆的最大空间大小。
-XX:NewSize设置新声代最小空间大小。
-XX:MaxNewSize设置新生代最大空间大小。
-XX:PermSize设置永久代最小空间大小。
-XX:MaxPermSize设置永久代最大空间大小。
-Xss:设置每个线程的堆栈大小。
没有直接设置老年代大小的参数,但可以间接的进行控制:
老年代空间大小 = 堆空间大小 - 年轻代空间大小
现在对每个区进行介绍:
栈:java虚拟机栈是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应一个栈帧在