这些天我对java gc产生了浓厚的兴趣。我想得到年轻的gc优化导致一些stw真的很烦人。经过多次测试后,我发现年轻的gc暂停时间受到幸存者空间中剩余实时数据大小的影响(如 jstat -gcnew 所示):
任何人都可以告诉我这是对的,为什么。非常感谢。
答案 0 :(得分:1)
大多数JVM使用semi-space collector代表年轻一代。这意味着所有幸存的年轻gen对象都必须被复制,而死对象则不然。因此,直接复制所花费的时间与实时数据有关,而生成大小本身只是间接相关,因为大小*死亡率和旧促销率决定了活体对象可以驻留在年轻一代中。
受到剩余垃圾大小的影响很大
如果它在收集后仍然存在,那么它可能是实时数据,而不是垃圾。