【发布时间】:2019-02-06 06:23:00
【问题描述】:
G1 垃圾收集器比默认的好很多,但是它的清理时间长得不合理,运行 3 小时后清理了 27 分钟:
SUCCESS
Elapsed time: 186m21.5s
all done, exiting...
[GC concurrent-mark-end, 1626.1982305 secs]
[GC remark, 12.3848395 secs]
[GC cleanup 14G->14G(16G), 1.6514012 secs]
该程序运行在具有 16G RAM 的 4 核处理器上,它只使用一个线程(主线程)。一个内核总是很忙,大概是操作系统(Ubuntu Linux,值得信赖);当程序运行时,系统监视器显示其他 3 个内核的负载低于 100%。
程序从 bash shell 启动。没有其他软件与该程序并行运行。
有没有办法减少程序终止后花费的时间?
【问题讨论】:
-
我不太明白 - 为什么 GC 在程序终止后运行?它是在持续运行的 JVM 中安排的一些任务吗?如果是 - 为什么并发标记阶段所花费的时间与您有任何关系?
-
@piet.t 我不知道为什么程序没有立即退出,我看到的行为看起来毫无意义,但是当我切换到 G1 GC 时出现了这个错误。在 "exiting..." 消息之后 main() 中没有任何内容,但是我看到了这些 GC 消息,这就是为什么我相信在 main() 退出后 GC 继续工作。
标签: java performance garbage-collection jvm