CMS垃圾收集器中的完整gc

时间:2017-03-22 14:16:07

标签: java garbage-collection

我在java应用程序中使用cms gc。当我在GC log中看到以下行时,我感到困惑。这些是

  • 2017-02-21T00:55:45.882 + 0000:2.686:[全部 GC2017-02-21T00:55:45.882 + 0000:2.687:[CMS:0K-> 7878K(1398144K), 0.0691810秒] 111848K-> 7878K(2027264K),[CMS Perm:9947K-> 9942K(16384K)],0.0693460秒] [时间:用户= 0.06 sys = 0.02, 真实= 0.07秒]
  • 2017-02-21T08:27:14.733 + 0000:27091.537:[GC [1 CMS-initial-mark: 699151K(1398144K)] 716604K(2027264K),0.0117710秒] [时间: user = 0.01 sys = 0.00,real = 0.02 secs]
  • 2017-02-21T08:27:14.745 + 0000:27091.549:[CMS-concurrent-mark-start]
  • 2017-02-21T08:27:14.784 + 0000:27091.588:[CMS-concurrent-mark: 0.039 / 0.039秒] [时间:用户= 0.21 sys = 0.01,实际= 0.03秒]
  • 2017-02-21T08:27:14.784 + 0000:27091.588: [CMS-并发预清洗开始]
  • 2017-02-21T08:27:14.787 + 0000:27091.591:[CMS-concurrent-preclean: 0.003 / 0.003秒] [时间:用户= 0.01 sys = 0.00,实际= 0.01秒]
  • 2017-02-21T08:27:14.787 + 0000:27091.592: [CMS-concurrent-abortable-preclean-start] CMS:由于中止而中止预清洁 时间2017-02-21T08:27:19.863 + 0000:27096.668: [CMS-concurrent-abortable-preclean:5.070 / 5.076 secs] [时间: user = 6.44 sys = 0.35,real = 5.07 secs]
  • 2017-02-21T08:27:19.864 + 0000:27096.668:[GC [YG占用率:217654 K] (629120 K)] 2017-02-21T08:27:19.864 + 0000:27096.668:[重新扫描 (平行),0.0268070秒] 2017-02-21T08:27:19.891 + 0000:27096.695: [弱参考处理,0.0005040秒] 2017-02-21T08:27:19.891 + 0000: 27096.696:[scrub string table,0.0005510 secs] [1 CMS-remark:699151K(1398144K)] 916806K(2027264K),0.0281100 secs] [次: user = 0.42 sys = 0.00,real = 0.03 secs]
  • 2017-02-21T08:27:19.892 + 0000:27096.696:[CMS-concurrent-sweep-start]
  • 2017-02-21T08:27:21.014 + 0000:27097.818:[CMS-concurrent-sweep: 1.121 / 1.122秒] [时间:用户= 1.48 sys = 0.08,真实= 1.13秒]
  • 2017-02-21T08:27:21.014 + 0000:27097.818:[CMS-concurrent-reset-start]

这里主要的gc(mark-remark)只是清理旧内存,没有压缩和Full gc正在进行清理和紧凑的终身内存吗?

然后,我看到一篇文章说Full gc意味着要清理年轻一代和老一代。但是,Log只显示旧内存和堆内存细节。

谢谢(抱歉,如果有任何语法错误)

1 个答案:

答案 0 :(得分:0)

在CMS中,Full GC会将所有活动对象移动到旧空间。 Full GC后,年轻空间总是空的。

其他GC表现不同。即如果活物体数量大于旧空间容量,ParallOldGC将填补年轻空间。