购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.5 JVM的总体内存结构分布

如图3.7所示,JVM的内存结构主要包括3部分:堆内存(Heap)、方法区(Method Area)和栈(Stack)。此外,根据内存的使用特性,可将内存区域拆分为两种类型:内存共享区和线程私有区。

图3.7 JVM的内存结构图

下面介绍JVM内存结构模型比重。

堆内存是JVM中最大的一块内存空间,由新生区和老年区组成,在JVM启动时便会创建,此外我们也可以将新生区和老年区分别称为新生代和老年代。

(1)堆内存分为新生代(Young Generation)与老年代(Old Generation)。内存空间比例默认新生代∶老年代=1∶2,可以通过参数“–XX:NewRatio”来指定。

(2)新生代分为伊甸区(Eden)与幸存区(Survivor),内存空间比例为伊甸区∶幸存区=4∶1。

(3)幸存区总体会拆分为大小相同的两个区:幸存From区与幸存To区。幸存区在这里指的是两块相同区域的存储空间,如果只考虑内存使用率(因为幸存区一次只能使用一块),则比例是8∶1,其中伊甸区占比为80%,两块幸存区共占比为20%,因此,新生代实际可用的内存空间为9/10的新生代空间。

总体堆空间分布如图3.8所示。

图3.8 堆内存结构图

另外,其还有一个Non-Heap(非堆)内存区域,人们常常称其为方法区。方法区主要用来分别存放方法类型的信息、常量、静态方法变量和线程间共享的数据,和堆内存有本质区别。

线程私有区主要是栈内存空间。栈内存包括虚拟机栈和本地方法栈,它们主要用于方法的执行,详细内容会在后续章节中进行介绍。

注意:默认情况下新生代的三部分内存空间:伊甸区空间、幸存From区空间、幸存To区空间,按照8∶1∶1的比例来分配。 a1ZZYvfhp9EHPJvPR4eRquU1V37InzByJnP4zmfPH+4YCLpnv6s3Ch0sGQRLioLJ

点击中间区域
呼出菜单
上一章
目录
下一章
×