java - UseConcMarkSweepGC 与 UseParallelGC

标签 java performance garbage-collection g1gc concurrent-mark-sweep

我目前遇到垃圾收集时间过长的问题。请参阅以下内容。我当前的设置是我正在使用 -Xms1g 和 -Xmx3g。我的应用程序使用的是 java 1.4.2。我没有设置任何垃圾收集标志。从外观上看,3gb 是不够的,我真的有很多对象要垃圾收集。

问题:

我应该改变我的垃圾收集算法吗? 我应该用什么?使用 -XX:+UseParallelGC 还是 -XX:+UseConcMarkSweepGC 更好

或者我应该使用这个组合

-XX:+UseParNewGC -XX:+UseConcMarkSweepGC

占用内存的主要是报表数据,而不是缓存数据。另外,机器有 16gb 内存,我计划将堆增加到 8gb。

这两个选项之间有什么区别,因为我仍然很难理解。 机器有多个处理器。我最多可以承受 5 秒的打击,但 30 到 70 秒真的很难。

感谢您的帮助。

  Line 151493: [14/Jan/2012:11:47:48] WARNING ( 8710): CORE3283: stderr: [GC 1632936K->1020739K(2050552K), 1.2462436 secs]
    Line 157710: [14/Jan/2012:11:53:38] WARNING ( 8710): CORE3283: stderr: [GC 1670531K->1058755K(2050552K), 1.1555375 secs]
    Line 163840: [14/Jan/2012:12:00:42] WARNING ( 8710): CORE3283: stderr: [GC 1708547K->1097282K(2050552K), 1.1503118 secs]
    Line 169811: [14/Jan/2012:12:08:02] WARNING ( 8710): CORE3283: stderr: [GC 1747074K->1133764K(2050552K), 1.1017273 secs]
    Line 175879: [14/Jan/2012:12:14:18] WARNING ( 8710): CORE3283: stderr: [GC 1783556K->1173103K(2050552K), 1.2060946 secs]
    Line 176606: [14/Jan/2012:12:15:42] WARNING ( 8710): CORE3283: stderr: [Full GC 1265571K->1124875K(2050552K), 25.0670316 secs]
    Line 184755: [14/Jan/2012:12:25:53] WARNING ( 8710): CORE3283: stderr: [GC 2007435K->1176457K(2784880K), 1.2483770 secs]
    Line 193087: [14/Jan/2012:12:37:09] WARNING ( 8710): CORE3283: stderr: [GC 2059017K->1224285K(2784880K), 1.4739291 secs]
    Line 201377: [14/Jan/2012:12:51:08] WARNING ( 8710): CORE3283: stderr: [Full GC 2106845K->1215242K(2784880K), 30.4016208 secs]


xaa:1: [11/Oct/2011:16:00:28] WARNING (17125): CORE3283: stderr: [Full GC 3114936K->2985477K(3114944K), 53.0468651 secs] --> garbage collection occurring too often as noticed in the time. garbage being collected is quite low and if you would notice is quite close the the heap size. during the 53 seconds, this is equivalent to a pause.
xaa:2087: [11/Oct/2011:16:01:35] WARNING (17125): CORE3283: stderr: [Full GC 3114943K->2991338K(3114944K), 58.3776291 secs]
xaa:3897: [11/Oct/2011:16:02:33] WARNING (17125): CORE3283: stderr: [Full GC 3114940K->2997077K(3114944K), 55.3197974 secs]
xaa:5597: [11/Oct/2011:16:03:00] WARNING (17125): CORE3283: stderr: [Full GC[Unloading class sun.reflect.GeneratedConstructorAccessor119]
xaa:7936: [11/Oct/2011:16:04:36] WARNING (17125): CORE3283: stderr: [Full GC 3114938K->3004947K(3114944K), 55.5269911 secs]
xaa:9070: [11/Oct/2011:16:05:53] WARNING (17125): CORE3283: stderr: [Full GC 3114937K->3012793K(3114944K), 70.6993328 secs]

最佳答案

由于您的 GC 暂停时间非常长,因此认为更改 GC 算法不会有帮助。

请注意,您只有完整的 Collection 是非常可疑的。也许您需要增加年轻代和/或幸存者空间的大小。

另请参阅:

关于java - UseConcMarkSweepGC 与 UseParallelGC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9005632/

相关文章:

java - 是否可以更改 Java 中垃圾收集器的频率?

javascript - PhoneGap 垃圾收集

java - 如何在 Java 上更新 JSONArray 值

java - numberFormatException 编译错误

javascript - 通过javascript调用调用jsp页面

java - Proguard 保留接口(interface)方法参数名

sql - 从空表中删除永远

java - 常量引用的性能 - LIBGDX

performance - 优化 SOLR 荧光笔

java - 对实习生字符串、字符串池和永久空间的垃圾收集