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

Java垃圾收集日志消息

呼延珂
2023-03-14
问题内容

我已配置Java将垃圾回收信息转储到日志中(详细GC)。我不确定日志中的垃圾回收项是什么意思。这些条目的示例发布在下面。我在Google上四处搜寻,但找不到可靠的解释。

我有一些合理的猜测,但我正在寻找答案,这些答案提供了对条目中数字含义的严格定义,并有可靠的依据。引用sun文档的所有答案的自动+1。我的问题是:

  1. PSYoungGen指的是什么?我认为这与上一代(年轻人)有关,但是究竟是什么呢?
  2. 第二个三元组与第一个三元组有什么区别?
  3. 为什么要为数字的第一个三元组指定一个名称(PSYoungGen),而不为第二个数字指定名称?
  4. 三元组中的每个数字(内存大小)是什么意思。例如,在109884K-> 14201K(139904K)中,是GC 109884k之前的内存,然后将其减少为14201K。第三个数字有何关系?为什么我们需要第二组数字?

`8109.128:[GC [PSYoungGen:109884K-> 14201K(139904K)] 691015K-> 595332K(1119040K),0.0454530秒]

8112.111:[GC [PSYoungGen:126649K-> 15528K(142336K)] 707780K-> 605892K(1121472K),0.0934560秒]

8112.802:[GC [PSYoungGen:130344K-> 3732K(118592K)] 720708K-> 607895K(1097728K),0.0682690秒]`


问题答案:

命令行选项-verbose:gc使有关堆和垃圾收集的信息在每个收集处打印。例如,以下是大型服务器应用程序的输出:

[GC 325407K->83000K(776768K), 0.2300771 secs]
[GC 325816K->83372K(776768K), 0.2454258 secs]
[Full GC 267628K->83769K(776768K), 1.8479984 secs]

在这里,我们看到两个次要收藏,然后是一个主要收藏。箭头之前和之后的数字(例如,325407K->83000K从第一行开始)分别指示垃圾收集之前和之后的活动对象的组合大小。进行次要收集后,大小包括一些垃圾(不再存在)但无法回收的对象。这些对象包含在使用权的世代中,或从使用权的世代或永久代中引用。

括号中的下一个数字(例如,(776768K)从第一行起)是堆的提交大小:Java对象可用的空间量,而无需从操作系统请求更多的内存。请注意,此数字不包括幸存者空间之一,因为在任何给定时间只能使用一个幸存者空间,并且也不包括永久代,该永久代保存了虚拟机使用的元数据。

该行的最后一项(例如0.2300771 secs)指示执行收集所需的时间;在这种情况下,大约需要四分之一秒。

第三行中主要收藏的格式相似。

由产生的输出格式-verbose:gc可能会在将来的版本中更改。

我不确定为什么你有PSYoungGen;你更换垃圾收集器了吗?



 类似资料:
  • 问题内容: 是否可以在Sun JVM中滚动垃圾收集器日志? 目前,我使用以下命令生成日志: 但是我必须使用fifo队列和rotatelogs手动轮换它们以创建每天的新日志。我希望对此有更好的解决方案。 也许有一种方法可以从java内部访问此日志条目,以便将它们重定向到log4j? 编辑:使用fifo队列的解决方案还不够好,因为如果从该队列中读取的进程(例如rotatelogs)读取速度变慢,则会减

  • 本文向大家介绍Java垃圾收集,包括了Java垃圾收集的使用技巧和注意事项,需要的朋友参考一下 示例 C ++方法-新增和删除 在像C ++这样的语言中,应用程序负责管理动态分配的内存所使用的内存。当使用new运算符在C ++堆中创建对象时,需要相应地使用delete运算符来处置该对象: 如果程序忘记了delete一个对象而只是“忘记”了该对象,则关联的内存将丢失给应用程序。这种情况的术语是内存泄

  • Kubernetes 垃圾收集器的角色是删除指定的对象,这些对象曾经有但以后不再拥有 Owner 了。 注意:垃圾收集是 beta 特性,在 Kubernetes 1.4 及以上版本默认启用。 Owner 和 Dependent 一些 Kubernetes 对象是其它一些的 Owner。例如,一个 ReplicaSet 是一组 Pod 的 Owner。具有 Owner 的对象被称为是 Owner

  • 有人能给我解释一下原因吗?

  • JavaScript 具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。 而在C 和C++之类的语言中,开发人员的一项基本任务就是手工跟踪内存的使用情况,这是造成许多问题的一个根源。在编写JavaScript 程序时,开发人员不用再关心内存使用问题,所需内存的分配以及无用内存的回收完全实现了自动管理。这种垃圾收集机制的原理其实很简单:找出那些不再继续使用的变量,然后释放其

  • 问题内容: 我正在寻找一种工具或脚本,该工具或脚本将从我的Web应用程序获取控制台日志,解析出垃圾回收信息并以有意义的方式显示。 我正在使用以下标志在Sun Java 1.4.2 JVM上启动: 日志输出如下所示: 如果我有一个可视化地显示垃圾收集趋势的工具,那么了解数百种这类日志条目将变得容易得多。 问题答案: IBM的GC工具箱完全可以满足您的要求。 https://www.ibm.com/d