Я профилирую приложение Java с помощью Java Mission Control, и на главной странице записи полета говорится, что «Эта запись содержит несколько образцов профилирования, хотя загрузка ЦП высока. Таким образом, данные профилирования, вероятно, не имеют отношения к делу».
Кажется, это правда. Я попросил его выполнять выборку каждые 10 мс в течение 3 минут, что должно быть 18000 выборок, но я вижу только 996 выборок.
Далее объясняется: «Таким образом, данные профилирования, вероятно, не имеют отношения к делу. Это может быть связано с тем, что приложение выполняет много кода JNI или что JVM тратит много времени на сборку мусора, загрузку классов, JIT-компиляцию и т. Д.»
Хм, у меня нет собственных методов, и он не должен загружать классы или выполнять какую-либо JIT на записанном мной этапе (хорошо в части кода с повторяющимися числами). Не похоже, что он тратит много времени. чрезмерное количество времени на сборку мусора тоже.
Мы использовали hprof для профилирования этого продукта, и с большим успехом. Hprof очень помог в выяснении того, где мы полагаемся на выполнение основного потока, поэтому мы могли распараллелить горячие точки на несколько потоков. Но этот инструмент больше не поддерживается в Java 9, поэтому мы переходим к Java Mission Control. В нем много чего, но если он не может определить, на каких номерах строк находятся потоки виртуальной машины в случайное время выборки, это не очень полезно. Есть еще какой-нибудь инструмент? Или есть способ отладить это дальше из Java Mission Control? Также похоже, что JVisualVM больше не включен в Java 9.