Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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垃圾收集日志条目是否为“;完整GC(系统)“;是指某个名为System.gc()的类吗?_Java_Garbage Collection - Fatal编程技术网

java垃圾收集日志条目是否为“;完整GC(系统)“;是指某个名为System.gc()的类吗?

java垃圾收集日志条目是否为“;完整GC(系统)“;是指某个名为System.gc()的类吗?,java,garbage-collection,Java,Garbage Collection,垃圾收集日志中的“完整GC(系统)”条目是什么意思?某个名为System.gc()的类 我的垃圾收集日志有两种不同的“完整gc”条目类型?一个有“系统”这个词,另一个没有。有什么区别 (更新:我搜索了这个词,没有找到一个明确的答案,只有几个问题。所以我想我应该发布它) 系统: 164638.058:[完整GC(系统)[PSYoungGen:22789K->0K(992448K)] [PSOldGen: 1645508K->1666990K(2097152K)] 1668298K->1666990

垃圾收集日志中的“完整GC(系统)”条目是什么意思?某个名为System.gc()的类

我的垃圾收集日志有两种不同的“完整gc”条目类型?一个有“系统”这个词,另一个没有。有什么区别

(更新:我搜索了这个词,没有找到一个明确的答案,只有几个问题。所以我想我应该发布它)

系统:

164638.058:[完整GC(系统)[PSYoungGen:22789K->0K(992448K)] [PSOldGen: 1645508K->1666990K(2097152K)] 1668298K->1666990K(3089600K) [PSPermGen: 164914K->164914K(166720K)],5.7499132 秒][次:用户=5.69系统=0.06, 实际值=5.75秒]

无系统:

166687.013:[完整GC[PSYoungGen:126501K->0K(922048K)][PSOldGen: 2063794K->1598637K(2097152K)] 2190295K->1598637K(3019200K) [PSPermGen: 165840K->164249K(166016K)],6.8204928 秒][次:用户=6.80系统=0.02, 实际值=6.81秒]

GC选项

我们与gc相关的java内存选项包括: -Xloggc:../server/pe/log/jvm_gc.log-XX:+printgtimestamps-XX:+printgcmetails

我们没有'-XX:+DisableExplicitGC',所以可能有一些错误的类调用System.gc()

fwiw,我们的完整jvm选项:

-Xms3072m-Xmx3072m-XX:+heapdumponootfmemoryerror-XX:-usegcoveredlimit-Xloggc:../server/pe/log/jvm\u gc.log-XX:+printgtimestamps-XX:+printgcmetails-XX:MaxPermSize=256m-XX:+UseCompressedOops

提前感谢,


从OpenJDK的源代码中,我会说它是

const bool is_system_gc = gc_cause == GCCause::_java_lang_system_gc;

// This is useful for debugging but don't change the output the
// the customer sees.
const char* gc_cause_str = "Full GC";
if (is_system_gc && PrintGCDetails) {
  gc_cause_str = "Full GC (System)";
}
我创建了一个自定义版本的Runtime类,以便在调用Runtime.getRuntime().gc()时记录线程名称和对文件的堆栈跟踪。(System.gc()调用此函数)我发现它在跟踪和删除此类调用者方面很有用

发生这种情况的一个地方是sun.misc.GC类。RMI将要求此类确保GC已在过去N秒内执行。如果没有GC,则会触发完整GC

如果你减少次要地面军事系统的数量,这只是一个问题。讽刺的是,这可能意味着你获得了更多的GCs

我不使用RMI(也许JConsole除外),所以我将它设置为一周。(假设默认值为一小时)


从OpenJDK的源代码来看,我认为是这样的

const bool is_system_gc = gc_cause == GCCause::_java_lang_system_gc;

// This is useful for debugging but don't change the output the
// the customer sees.
const char* gc_cause_str = "Full GC";
if (is_system_gc && PrintGCDetails) {
  gc_cause_str = "Full GC (System)";
}
我创建了一个自定义版本的Runtime类,以便在调用Runtime.getRuntime().gc()时记录线程名称和对文件的堆栈跟踪。(System.gc()调用此函数)我发现它在跟踪和删除此类调用者方面很有用

发生这种情况的一个地方是sun.misc.GC类。RMI将要求此类确保GC已在过去N秒内执行。如果没有GC,则会触发完整GC

如果你减少次要地面军事系统的数量,这只是一个问题。讽刺的是,这可能意味着你获得了更多的GCs

我不使用RMI(也许JConsole除外),所以我将它设置为一周。(假设默认值为一小时)


我在我的mac上测试显式GC,它在使用JDK1.6时显示“完整GC(系统)”,但在使用JDK1.7时显示“完整GC”
因此,在调优GC日志时不要依赖“系统”标签,除非您确切了解运行环境和jdk版本号

我在mac上测试显式GC,使用jdk 1.6时它确实显示“完整GC(系统)”,但使用jdk 1.7时显示“完整GC”
所以,在调优GC日志时不要依赖“系统”标签,除非您确切了解运行环境和jdk版本号

\u java\u lang\u System\u GC看起来与java.lang.System.GC()非常接近。“只是让它简单化”。如果不阅读所有代码,我会说这是一个安全的赌注。我已经在回答中添加了如何检测触发此完整GC的原因,以及您可能的原因以及如何修复它。_java\u lang\u system\u GC看起来与java.lang.system.GC()非常接近。“只是让它简单化”。如果不阅读所有代码,我认为这是一个安全的赌注。我已经在我的答案中添加了说明如何检测是什么触发了这个完整的GC,您的原因可能是什么,以及如何修复它。