【问题标题】:JVM - young generation and old generation ratio/allocationJVM - 年轻代和老年代的比例/分配
【发布时间】:2020-05-16 12:21:31
【问题描述】:

我正在为用 Java 编写的应用程序分配最大 8GB 内存。它内存不足。我相信默认情况下,年轻代总是小于老一代(堆的 1/4)。而伊甸园/幸存者 1,2 在年轻一代中。我相信新的对象是在伊甸园空间中创造出来的。

老年代未满,而新生代已满,java应用程序是否仍会出现内存不足?

如果短寿命对象比长寿命对象多,是否可以为年轻代分配更多内存或至少 50% 的堆给年轻代?还是因为 jvm 维护,它应该总是堆的 1/4?

【问题讨论】:

  • 默认设置已经包含了比老年代大的年轻代。我想,这意味着可以这样做……

标签: java garbage-collection jvm


【解决方案1】:

首先,1/4 似乎是另一回事。这就是将分配给您的堆的内存量,除非您指定-Xmx(当您在容器中时以及您启用了哪些标志时会有所不同)。

老年代未满,而新生代已满,java应用程序是否仍会出现内存不足?

没有。当年轻的Eden 已满时,来自那里的活动对象被移动到Survivor,当来自 Survivor 的那些“存活”足够的 GC 周期时,它们被移动到旧区域(由XX:MaxTenuringThreshold 控制)。当老年代达到一定的限制(G1 中的IHOP),就会发生一个接触老年代的GC 循环。一些more details here

如果短寿命对象比长寿命对象多,是否可以为年轻代分配更多内存或至少 50% 的堆给年轻代?

年轻的区域越大,停顿的时间就越长。年轻的 GC 周期总是停止世界事件,因此将它们设置得太大是不好的。除此之外,这将影响您的-XX:MaxGCPauseMillis;也不要自己这样做:默认情况下G1 GC will adjust regions as it finds most appropriate to

【讨论】:

    猜你喜欢
    • 2011-09-09
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    相关资源
    最近更新 更多