我需要一些关于次要gc集合行为的澄清。调用a()
或调用b()
寿命长的应用程序,如果它们在旧空间变大时表现最差
//an example instance lives all application life cycle 24x7 public class Example { private Object longLived = new Object(); public void a(){ var shortLived = new ShortLivedObject(longLived); // longLived now is attribute shortLived.doSomething(); } public void b(){ new ShortLivedObject().doSomething(new Object()); // actually now is shortlived } }
我的疑惑来自何处?我发现,在使用的使用权空间变大的应用程序中,gc暂停次数增加了。
做一些测试,我发现如果我强迫jvm使用option,a()
而另一个jvm使用option b()
,则b()
当旧空间变大时,带有option的jvm的暂停持续时间较短,但我不知道为什么。
我使用4096中的此属性XX:ParGCCardsPerStrideChunk在应用程序中解决了该问题,但我想知道上述情况是否会导致gctimes增大,从而导致gccard表中的扫描速度变慢或我不知道或正在完全没有关系。