マイナー 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
}
}
私の疑問はどこから来るのですか?使用された Tenured スペースが大きくなるアプリでは、マイナー gc 一時停止が増加することがわかりました。
いくつかのテストを行うと、jvm に option を使用させa()
、別の jvm に option を使用させると、古いスペースが大きくなると、オプションを使用した jvm の一時停止時間が短くなることがb()
わかりましたが、その理由はわかりません。b()
4096 でこのプロパティXX:ParGCCardsPerStrideChunkを使用してアプリでその問題を解決しましたが、上記の状況が gctimes の増加につながる可能性があるかどうかを知りたいのですが、gccard テーブルでのスキャンが遅くなったり、何かわからないことがあります全く関係ありません。