Ранее я читал статью о том, что 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 на нее?