我在现场看到一个Java客户端应用程序崩溃,我认为这是因为它连接的服务器经历了12秒的全GC暂停。然而,当我尝试在Eclipse中本地运行客户端/服务器并使用kill -STOP和kill -CONT来模拟服务器上的GC暂停以重现此行为时,我无法使客户端应用程序崩溃 - 它只会旋转直到我执行kill -CONT。 我想弄清楚GC暂停是否真的是问题所在(如果不是,我将需要深入代码以查看其他可能发生的事情)。在经历长时间GC暂停和接收kill -STOP后跟随kill -CONT之间是否有行为差异?
二者之间肯定是有区别的。至少,在垃圾收集器暂停期间,它会操作和解析对象,而在kill -STOP期间则不会。 此外,垃圾收集器将调用 finalizer 函数,这可能是导致崩溃错误的地方,而这种行为无法通过kill -STOP重现。