Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我能让年轻的一代比老一代大吗?_Java_Garbage Collection_Heap - Fatal编程技术网

Java 我能让年轻的一代比老一代大吗?

Java 我能让年轻的一代比老一代大吗?,java,garbage-collection,heap,Java,Garbage Collection,Heap,如果我看到新一代的大部分活动和老一代的空间都没有得到充分利用,那么把年轻一代的规模定得比老一代大可以吗。 将新一代的数量增加到旧一代的数量以上会有什么后果吗 像-Xmx2g-Xmn1.5g一样,您可以使用-Xmn实现这一点(这个答案基于Java8) 发件人: 设置年轻一代(托儿所)堆的初始大小和最大大小(字节)。附加字母k或k表示千字节,m或m表示兆字节,g或g表示千兆字节 堆的年轻一代区域用于新对象。GC在该区域执行的频率高于其他区域。如果年轻一代的大小太小,那么将执行大量较小的垃圾收集。如果

如果我看到新一代的大部分活动和老一代的空间都没有得到充分利用,那么把年轻一代的规模定得比老一代大可以吗。 将新一代的数量增加到旧一代的数量以上会有什么后果吗


像-Xmx2g-Xmn1.5g一样,您可以使用
-Xmn
实现这一点(这个答案基于Java8)

发件人:

设置年轻一代(托儿所)堆的初始大小和最大大小(字节)。附加字母k或k表示千字节,m或m表示兆字节,g或g表示千兆字节

堆的年轻一代区域用于新对象。GC在该区域执行的频率高于其他区域。如果年轻一代的大小太小,那么将执行大量较小的垃圾收集。如果大小太大,则只执行完全垃圾收集,这可能需要很长时间才能完成。Oracle建议将年轻一代的堆大小保持在总堆大小的一半到四分之一之间

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

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

比如说

-Xms1024M-Xmx1024M-Xmn800m

这些空间将如下所示(使用visualvm的visual gc插件)

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

发件人:

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


你在说什么?大多数活动应该在新一代,这就是重点。如果您觉得分配的堆比需要的多,请将其缩小。不过,你可能不应该增加新一代的规模。