java GC暂停和终止是否会产生相同的行为?
我看到Java客户机应用程序在现场崩溃,我认为这是因为它所连接的服务器经历了12秒的GC完全暂停。然而,当我尝试在Eclipse之外本地运行客户机/服务器,并使用kill-STOP和kill-CONT在服务器上模拟GC暂停来重现行为时,我无法使客户机应用程序崩溃——它只是在执行kill-CONT之前旋转
我想弄清楚GC暂停是否真的是问题所在(如果不是,我需要深入研究代码,看看还会发生什么)。在经历长时间GC暂停和接收kill-STOP,然后是kill-CONT之间,行为是否有区别
# 1 楼答案
当然有区别。至少,垃圾收集器在GC暂停期间正在操作和解析对象,而在
kill -STOP
期间却没有这样做此外,垃圾收集器将调用终结器,终结器可能位于崩溃bug所在的位置,并且这种行为不会通过
kill -STOP
重复