1

我正在使用以下标志启动一个 java 1.6.0.32 实例

set JAVA_OPTS=%JAVA_OPTS% -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
set JAVA_OPTS=%JAVA_OPTS% -XX:+UseBiasedLocking -XX:+ExplicitGCInvokesConcurrent
set JAVA_OPTS=%JAVA_OPTS% -XX:+PrintGCDetails
set JAVA_OPTS=%JAVA_OPTS% -XX:+PrintGCTimeStamps
set JAVA_OPTS=%JAVA_OPTS% -XX:+PrintGCApplicationStoppedTime
set JAVA_OPTS=%JAVA_OPTS% -XX:+PrintGCApplicationConcurrentTime
set JAVA_OPTS=%JAVA_OPTS% -Xloggc:gc.log
set JAVA_OPTS=%JAVA_OPTS% -XX:+PrintHeapAtGC
set JAVA_OPTS=%JAVA_OPTS% -XX:+HeapDumpOnOutOfMemoryError
set JAVA_OPTS=%JAVA_OPTS% -XX:HeapDumpPath=heap-dump.core
set JAVA_OPTS=%JAVA_OPTS% -server -XX:MaxTenuringThreshold=8 -XX:+CMSIncrementalMode 
set JAVA_OPTS=%JAVA_OPTS% -XX:+CMSIncrementalPacing -XX:+DoEscapeAnalysis 
set JAVA_OPTS=%JAVA_OPTS% -XX:+OptimizeStringConcat
REM set JAVA_OPTS=%JAVA_OPTS% -XX:+UseCompressedOops REM for 64 bit only
set JAVA_OPTS=%JAVA_OPTS% -XX:+UseCompressedStrings -XX:+UseFastAccessorMethods 
set JAVA_OPTS=%JAVA_OPTS% -XX:+PrintTenuringDistribution -XX:+UseStringCache 
set JAVA_OPTS=%JAVA_OPTS% -verbose:gc

在我的应用程序初始化后,我明确要求进行完整的垃圾回收,并等待它使用技术完成。我已经确认堆使用 jvisualvm 大幅压缩,但完整的 GC 似乎没有记录在我的 gc 日志中。我已经为“Full GC”而苦苦挣扎,但没有结果。请注意,-XX:+DisableExplicitGC已关闭。我做错什么了吗?显式 GC 没有记录吗?任何指针都非常感谢

4

2 回答 2

1

FullGC是 Stop-the-World mark-sweep-compact 系列的标志。

您正在使用-XX:+ExplicitGCInvokesConcurrent,此标志告诉 JVM 在调用 System.gc() 时使用并发收集而不是 STW。

您可以在本文中查看并发收集器 (CMS) 的日志示例。

于 2012-06-08T13:59:01.887 回答
0

我一直认为 DisableExplicitGC 禁用了显式 GC,因此您不应该在日志中看到任何内容。

您似乎正忙于等待其他事情触发 GC。

于 2012-06-08T07:19:30.677 回答