我可以拥有比老一代更大的年轻人吗?

时间:2017-06-09 20:53:54

标签: java garbage-collection heap

如果我看到新一代的大多数活动和老一代的空间被利用不足,那么年轻一代的规模是否可以比老一代更大。 增加新的gen gen以上是否有任何后果?

喜欢-Xmx2g -Xmn1.5g

1 个答案:

答案 0 :(得分:0)

您可以使用-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插件) enter image description here

您将拥有1024m的总堆大小,其中年轻一代(伊甸园+ 2个幸存者空间)为800m,老一代为224m。 您可以使用SurvivorRatio

调整幸存者空间

来自docs

  

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