如果我看到新一代的大多数 Activity 和下一代空间的利用不足,将年轻人的大小大于老年人的大小是否可以?
将新的一代增加到超过旧一代有什么后果吗?

像-Xmx2g -Xmn1.5g

最佳答案

您可以使用-Xmn做到这一点(此答案基于Java 8)

docs:

设置年轻一代(苗圃)的堆的初始大小和最大大小(以字节为单位)。字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。

堆的年轻代区域用于新对象。与其他区域相比,在该区域执行GC的频率更高。如果年轻一代的大小太小,则会执行许多次要的垃圾回收。如果大小太大,那么将仅执行完整的垃圾收集,这可能需要很长时间才能完成。 Oracle建议您将年轻代的大小保持在整个堆大小的一半到四分之一之间。

以下示例显示如何使用各种单位将年轻一代的初始大小和最大大小设置为256 MB:


  • -Xmn256m
  • -Xmn262144k
  • -Xmn268435456


  • 可以使用 -XX:NewSize设置初始大小,使用-XX:MaxNewSize设置最大大小,而不是-Xmn选项为年轻一代设置堆的初始大小和最大大小。

    因此,例如
    -Xms1024M -Xmx1024M -Xmn800m
    空格将如下所示(使用visualvm的visual gc插件)
    java - 我可以让年轻一代比老一代大吗?-LMLPHP

    您的堆总大小为1024m,其中年轻一代(eden + 2个幸存者空间)为800m,老一代为224m。
    您可以使用SurvivorRatio调整幸存者空间

    docs:

    您可以使用参数SurvivorRatio来调整幸存空间的大小,但这对性能通常并不重要。例如,-XX:SurvivorRatio = 6将伊甸园和幸存空间之间的比率设置为1:6。换句话说,每个幸存者空间将是伊甸园大小的六分之一,因此是年轻一代的八分之一(而不是七分之一,因为有两个幸存者空间)。

    10-08 04:15