我在现场看到Java客户端应用程序崩溃,我认为这是因为它连接的服务器经历了12秒的完整GC暂停。但是,当我尝试从Eclipse本地运行客户端/服务器并使用kill -STOP重新生成行为并使用kill -CONT来模拟服务器上的GC暂停时,我无法让客户端应用程序崩溃 - 它只是旋转,直到我杀死-CONT。
我想知道GC暂停是否真的是问题(如果不是,我需要深入研究代码,看看还有什么可能发生)。经历长GC暂停和接收kill -STOP后跟kill -CONT?
之间的行为是否存在差异?答案 0 :(得分:3)
肯定存在差异。至少,垃圾收集器在GC暂停期间正在操作和解析对象,而在kill -STOP
期间没有这样做。
此外,垃圾收集器将调用终结器,这可能是您的崩溃错误所在的位置,并且此行为不会通过kill -STOP
重复。