当所有对象都年轻时使用java GC

当所有对象都年轻时使用java GC,java,garbage-collection,Java,Garbage Collection,对于这种情况,当所有对象都很年轻就死亡时,您建议使用什么样的GC设置? 我有8GB的堆,默认情况下,Eden使用1.495GB,每个幸存者空间使用191MB。 我明白了,终身职位永远不会增长,它总是保持0.01%的占有率。 但每2-3分钟我就有伊甸园系列。 长期租约中大量未使用的空间是没有意义的(或者是有意义的?)? 你有什么建议?这并不危险。只要堆能够舒适地装入主内存,就不会有问题。我还建议您尽可能使用压缩OOP(通过保持堆

对于这种情况,当所有对象都很年轻就死亡时,您建议使用什么样的GC设置? 我有8GB的堆,默认情况下,Eden使用1.495GB,每个幸存者空间使用191MB。 我明白了,终身职位永远不会增长,它总是保持0.01%的占有率。 但每2-3分钟我就有伊甸园系列。 长期租约中大量未使用的空间是没有意义的(或者是有意义的?)?
你有什么建议?

这并不危险。只要堆能够舒适地装入主内存,就不会有问题。我还建议您尽可能使用压缩OOP(通过保持堆<32GB) 我经常有一个24 GB的Eden,所以如果我每小时产生1 GB的垃圾,我每天会得到一次小的收集。(事实上,我每天都会在已知的时间安排一次完整的收集)

一个值得认真考虑的问题是使用java 8作为JVM有一个有效的逃避分析。这意味着寿命很短的对象被放置在堆栈上,根本不使用堆

需要记住的是,收集伊甸园的成本基本上与保留的物品的数量和大小成正比。拥有一个几乎什么都没有的伊甸园,一个8GB的伊甸园花费的时间大约是8MB伊甸园的两倍。
增加伊甸园的大小可以让你的对象有更多的时间在伊甸园空间中死亡,并避免被复制到幸存者身上。

不清楚为什么有人降级了这个问题。在我的例子中,所有的工作都发生在伊甸园中,而不是在终身空间中,我害怕最大化伊甸园并减少终身空间,因为我不知道它是否危险。另外,我不想通过增加伊甸园来增加次要收集时间。在我看来,6Gb的终身空间总是空的,一切都在1.5Gb的伊甸园中运行。“以意见为基础暂停”。我不明白。为什么?被接受的答案所指明的意见中可能有什么错误?如果你搁置某件事,你需要说明原因,而不仅仅是重复你的观点。羞耻。这是我问题的完美答案。1)你认为将-XX:NewRatio设为0.5是正常的吗,意思是-我想要年轻人比终身教育大一倍?我几乎无法想象,有可能留下小的终身职位和大的年轻人……)。2) 对于Java8来说,应用程序是由Java6编译来实现堆栈的,这并不重要,你提到过吗?谢谢。@VladimirNabokov您不能设置一个不是整数的新大小。但是,是的,我经常设定伊甸园是终身教育的10倍。Java在运行时根据您的使用方式动态优化代码。它是如何编译的并不重要。@VladimirNabokov顺便说一句,仅仅因为我将Eden设置为10倍,并不意味着它对95%的用例都有意义。每天调整一个gc就是一个极端的例子。我的观点是;这样做没问题。彼得,你怎么把伊甸园设置得比没有新比率的终身教育还要大?(我使用-XX:NewSize)谢谢。有500个以上的gc调优参数:P我使用-Xmn=设置新的大小,-XX:survivoratio=设置Eden与survivor的比率。如果所有物体都死在伊甸园中,我将幸存者比率设置为100,以使伊甸园最大化。