Java 如何禁用GC或获取某些代码执行之间的GC暂停时间?
在FGC影响计时并使应用程序产生错误结果之前,我读过一篇文章。Java 如何禁用GC或获取某些代码执行之间的GC暂停时间?,java,jvm,Java,Jvm,在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发生在开始和结束分配之间,则时间
代码示例如下所示:
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发生在开始
和结束
分配之间,则时间将超过实际值并影响结果
有一些方法可以修复。一种方法是禁用它们之间的GC,我知道现在不可能禁用GC。我想知道是否有任何方法可以删除某些代码之间的
safepoint
(或者重构代码以实现它?)
另一种方法是获得GC暂停时间,似乎(可能)并不比第一种方法更难
回到问题:如果我有一个时间敏感的逻辑,我如何避免它受到GC的影响?您可以在这里做一些事情(按照难度的增加顺序,您可以将其中一些结合起来):