当前位置: 首页 > 面试题库 >

Java垃圾回收日志条目“ Full GC(系统)”是否意味着某个名为System.gc()的类?

梅跃
2023-03-14
问题内容

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

我的垃圾收集日志对“ full gc”有两种不同的输入类型?一个带有“系统”一词,另一个没有。有什么不同?

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

系统:

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

无系统:

166687.013:[完整GC [PSYoungGen:126501K-> 0K(922048K)] [PSOldGen:2063794K->
1598637K(2097152K)] 2190295K-> 1598637K(3019200K)[PSPermGen:165840K->
164249K(166016K)],6.8204928秒]时间:user = 6.80 sys = 0.02,真实= 6.81秒]

GC选项

我们与gc相关的java内存选项为:-Xloggc:../ server / pe / log / jvm_gc.log -XX:+
PrintGCTimeStamps -XX:+ PrintGCDetails

我们不使用’-XX:+ DisableExplicitGC’,因此某些错误的类可能会调用System.gc()

首先,我们的完整jvm选项:

-Xms3072m -Xmx3072m -XX:+ HeapDumpOnOutOfMemoryError -XX:-UseGCOverheadLimit
-Xloggc:../ server / pe / log / jvm_gc.log -XX:+ PrintGCTimeStamps -XX:+
PrintGCDetails -XX:MaxPermSize = 256m -XX:+ UseCompressedOop

提前致谢,


问题答案:

从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。

仅当减少次要GC的数量时,这才显示为问题。具有讽刺意味的是,这可能意味着您可以获得更多完整的GC。;)

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

-Dsun.rmi.dgc.server.gcInterval=604800000
-Dsun.rmi.dgc.client.gcInterval=604800000


 类似资料:
  • 问题内容: 我们打开了详细的GC日志记录来跟踪已知的内存泄漏,并在日志中获得以下条目: 我理解其中的第一个和第三个,但是“ GC–”是什么意思? 问题答案: 我在gc输出中得到了以下几行: 我读了Yishai的回答,这很有意义,但是当JVM在GC日志中打印“-”时,我想在Java GC源代码中亲自查看它,以及为什么。 据我所知,Young Gen的“ Parallel Scavenge”是一个停滞

  • 主要内容:总结通过前几节对可利用空间表进行动态存储管理的介绍,运行机制可以概括为: 当用户发出申请空间的请求后,系统向用户分配内存;用户运行结束释放存储空间后,系统回收内存。这两部操作都是在用户给出明确的指令后,系统对存储空间进行有效地分配和回收。 但是在实际使用过程中,有时会因为用户申请了空间,但是在使用完成后没有向系统发出释放的指令,导致存储空间既没有被使用也没有被回收,变为了 无用单元或者会产生 悬挂访问

  • 问题内容: 我已配置Java将垃圾回收信息转储到日志中(详细GC)。我不确定日志中的垃圾回收项是什么意思。这些条目的示例发布在下面。我在Google上四处搜寻,但找不到可靠的解释。 我有一些合理的猜测,但我正在寻找答案,这些答案提供了对条目中数字含义的严格定义,并有可靠的依据。引用sun文档的所有答案的自动+1。我的问题是: PSYoungGen指的是什么?我认为这与上一代(年轻人)有关,但是究竟

  • 主要内容:1 什么是Java 垃圾回收,2 Java 垃圾回收的优势,3 如何取消对象引用,4 finalize()方法,5 gc()方法,6 Java 垃圾回收的例子1 什么是Java 垃圾回收 在Java中,垃圾意味着未引用的对象。 垃圾回收是自动回收运行时未使用的内存的过程。换句话说,这是销毁未使用对象的一种方法。 我们在C语言中使用free() 函数,在C ++中使用delete()。但是,在Java中它是自动执行的。因此,java提供了更好的内存管理。 2 Java 垃圾回收的优势 它

  • 问题内容: 我想知道Java中发生的垃圾回收。它真的能够处理所有未使用的对象并释放最大可能的内存吗? 我还想知道Java垃圾收集与另一种语言(例如C#)相比如何?然后,如何自动垃圾收集与从像C这样的语言中进行手动收集相比又能达到更好的效果呢? 问题答案: 是的,这就是垃圾收集的重点。 有许多不同形式的垃圾收集。如果不增强算法,最简单的形式即引用计数就无法处理某些类型的垃圾(循环引用)。 Java(

  • 嗨,根据这里的留档https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/concurrent.html#mostly_concurrent热点JVM有两个并发收集器——CMS和G1。所以在垃圾回收机制中,这两个是并行使用的,还是只选择了一个?