我读过一篇文章,之前FGC影响了时序,并导致应用程序产生错误的结果。 代码示例如下:
long start = System.currentTimeInMillis();
doSomething();
// what if here comes a long time FGC pause
long end = System.currentTimeInMillis();
if (end - start > TIME_OUT) {
xxxx
}
如果GC在start
和end
分配之间发生,则时间将超过其实际值,并影响结果。
有一些修复方法。
一种方法是禁用它们之间的GC,我知道现在无法暂时禁用GC。我想知道是否有某种方法可以删除某些代码之间的safepoint
(或重构代码以实现它?)。
另一种方法是获得GC暂停时间,似乎(也许)不比第一种方法难。
回到问题所在:
如果我有时间敏感的逻辑,该如何避免它受到GC的影响?
答案 0 :(得分:1)
您可以在这里做几件事情(以难度递增的顺序,您可以将其中一些结合起来):
希望其中一些帮助和圣诞节快乐!