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