2

嗨:我有一个多线程 Java 应用程序。有很多临时对象。
-XX:MaxTenuringThreshold=1,我们在启动JVM的时候放了上面的参数。这意味着所有对象将在 gc 期间存活一次,然后将其提升到老年代。我们-XX:MaxTenuringThreshold=10可以举个例子,这样对象会在 10 次 gc 后提升到旧的 JVM 老年代。但这会在年轻 gc 期间导致不必要的复制操作(因为对象被复制“从 'eden' 到 'from'、从 'from' 到 'to'、'from'、'to' 是两个幸存者缓冲区)?

这些问题也可能意味着如果a)年轻代中有多次复制,老年代gc较少,b)老年代垃圾收集时间长但年轻代复制很少,哪一个更好?

4

1 回答 1

5

哪一个是“更好的性能”很大程度上取决于您的应用程序及其运行条件。您最好的希望是尝试各种垃圾收集选项,然后进行运行时和内存分析,以在内存使用和速度之间取得最佳平衡。

遗憾的是,垃圾收集设置没有灵丹妙药。

于 2011-06-07T05:10:19.473 回答