JVM分配担保的前提条件,jvm担保前提
投稿于 被查看 15573 次 评论:53
JVM分配担保的前提条件,jvm担保前提
条件一:
Eden区剩余内存空间不足以为新对象分配内存。通过JVM参数:-Xms -Xmx -Xmn限定新生代内存空间分配。
tips:
1、-Xms20m -Xmx20m
参数限定初始化堆内存为20M(即jvm启动时,分配给堆的初始内存大小)和运行期间可允许扩展到的最大堆内存为20M。
如果初始堆内存和最大堆内存一致表示堆内存不能扩展。
2、-Xmn10m参数指定新生代内存大小为10M。剩余堆内存10M将分配给老年代用于容纳达到分代年龄的对象或者达到分代对象大小限制的对象或者内存分配担保。
条件二:
Survivor区中(Survivor区有两块,可通过-XX:SurvivorRatio=8调整Eden与其中一块在新生代的内存比例)不足以容纳MinorGC后通过复制算法转移到该区域中的对象,即当Eden空间不足时,发生MinorGC,而Survivor区空间不足,将触发分配担保,但不保证担保成功。
tips:
1、实际情况是Eden与Survivor的比例是8:2即4:1,由于只有一块Survivor即From区可用,另一块空闲To等待下一次MinorGC后对象的转移。
条件三:
担保成功与否取决于老年代内存是否足够承担起分配担保的任务,即老年代内存足够将部分内存借出,用于容纳MinorGC触发后未复制转移到Survivor区的对象,如果老年代内存不够,则分配担保失败。抛出OutOfMemory通知。
用户评论