Улучшение производительности в OpenJDK: как замена чтения proc на clock_gettime увеличила скорость в 400 раз
В рамках изучения логов коммитов OpenJDK я наткнулся на интересный коммит, который кардинально изменил способ получения времени CPU для потоков. Вместо использования метода, основанного на чтении данных из /proc, был внедрён более эффективный вызов функции clock_gettime. Это привело к значительному уменьшению кода и, как следствие, к повышению производительности.
Ранее метод user_thread_cpu_time выполнял сложный парсинг файла статуса потока, что занимало от 30 до 400 раз больше времени по сравнению с новым решением. Теперь, благодаря вызову только одной функции clock_gettime, время выполнения сократилось до 279 наносекунд, что в 40 раз быстрее предыдущей реализации.
Кроме того, была рассмотрена возможность дальнейшей оптимизации, заключающаяся в прямом создании clockid с кодированием PID=0, что позволит избежать лишних системных вызовов. Это изменение, одобренное 3 декабря 2025 года, будет доступно в JDK 26, что обеспечит заметное ускорение для всех пользователей метода ThreadMXBean.getCurrentThreadUserTime.