菜鸟笔记
提升您的技术认知

jvm老年代和新生代的比例-ag真人游戏

java 中的堆是 jvm 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。
在 java 中,堆被划分成两个不同的区域:新生代 ( young )、老年代 ( old )。新生代 ( young ) 又被划分为三个区域:eden、from survivor、to survivor。
这样划分的目的是为了使 jvm 能够更好的管理堆内存中的对象,包括内存的分配以及回收。
堆的内存模型大致为:

从图中可以看出: 堆大小 = 新生代 老年代。其中,堆的大小可以通过参数 –xms、-xmx 来指定。
(本人使用的是 jdk1.6,以下涉及的 jvm 默认值均以该版本为准。)
默认的,新生代 ( young ) 与老年代 ( old ) 的比例的值为 1:2 ( 该值可以通过参数 –xx:newratio 来指定 ),即:新生代 ( young ) = 1/3 的堆空间大小。老年代 ( old ) = 2/3 的堆空间大小。其中,新生代 ( young ) 被细分为 eden 和 两个 survivor 区域,这两个 survivor 区域分别被命名为 from 和 to,以示区分。
默认的,edem : from : to = 8 : 1 : 1 ( 可以通过参数 –xx:survivorratio 来设定 ),即: eden = 8/10 的新生代空间大小,from = to = 1/10 的新生代空间大小。
jvm 每次只会使用 eden 和其中的一块 survivor 区域来为对象服务,所以无论什么时候,总是有一块 survivor 区域是空闲着的。
因此,新生代实际可用的内存空间为 9/10 ( 即90% )的新生代空间。

网站地图