Я использую Java в основном для написания домашних проектов, которые большую часть времени простаивают. А после простоя в течение нескольких часов/дней время отклика увеличивается до секунд (до 10 с), затем медленно снижается обратно до 200-300 мс.
Насколько я понимаю, это происходит из-за JIT деоптимизации (оптимизированный код помечается как зомби, удаляется, а затем снова компилируется).
Есть ли способ запретить JVM деоптимизировать код, если кеш кода не заполнен? AOT Java 9 выглядит лучшим решением для этого случая, но мне до сих пор не удалось заставить его работать.
UPD: И как всегда правильное решение очевидно. Похоже, проблема действительно была вызвана свопом. Несмотря на 12 ГБ оперативной памяти, 6 из которых были свободны, через некоторое время около 100 МБ памяти каждой JVM было заменено на жесткий диск.
Тем не менее ответ @apangin может быть полезен для кого-то, кто столкнулся с такой же ситуацией, поэтому я оставляю этот вопрос здесь. Спасибо всем!
-XX:+PrintCompilation
, чтобы проверить свое предположение. - person the8472   schedule 18.04.2017