К сожалению, я не думаю, что на данный момент Java RTS достаточно развита.
Время Java пытается обеспечить наилучшее значение (они фактически делегируют собственный код для вызова получения времени ядра). Тем не менее, спецификации JVM делают это грубое измерение времени отказом от ответственности в основном для таких вещей, как действия GC и поддержка базовой системы.
- Некоторые действия сборщика мусора будут блокировать все потоки, даже если вы выполняете параллельный сборщик мусора.
- Точность тика часов по умолчанию в Linux составляет всего 10 мс. Java не может сделать его лучше, если ядро linux не поддерживает.
Я не понял, как обратиться к #1, если только вашему приложению не нужно выполнять GC. Приличное приложение среднего размера, вероятно, иногда тратит десятки миллисекунд на паузы GC. Вам, вероятно, не повезло, если ваше требование к точности ниже 10 мс.
Что касается № 2, вы можете настроить ядро Linux на дать больше точности. Тем не менее, вы также получаете меньше из своей коробки, потому что теперь контекст ядра переключается чаще.
Возможно, стоит взглянуть на это под другим углом. Есть ли причина, по которой OPS требует точности на 10 мс ниже? Можно ли сказать оператору, что точность составляет 10 мс, И также просмотреть журнал GC в это время, чтобы они знали, что время с точностью +-10 мс без активности GC в это время?
person
Oscar Chan
schedule
30.09.2009