ОК, поскольку ваша цель - сделать код максимально быстрым, позвольте мне предложить, как это сделать.
Я не специалист по VisualVM, но я могу рассказать вам, что работает. (На самом деле только несколько профилировщиков говорят вам, что вам нужно знать, а именно - какие строки вашего кода находятся в стеке, что составляет значительную долю времени настенного времени .)
Единственное измерение, которое я когда-либо беспокоил, - это какой-то секундомер на общем времени или, альтернативно, если код имеет что-то вроде частоты кадров, количество кадров в секунду. Мне не нужна какая-то дальнейшая разбивка по точности, потому что в лучшем случае это удаленный ключ к тому, что тратит время (и чаще всего совершенно неактуально), когда есть очень прямой способ его найти.
Если вы не хотите делать случайную паузу , это ваше дело, но доказано, что это работает, и вот пример 43-кратного ускорения .
По сути, идея заключается в том, что вы получаете (небольшое, например, 10) количество стековых выборок, взятых в случайное время настенных часов.
Каждый образец состоит (очевидно) из списка сайтов вызовов, и, возможно, сайта без вызовов в конце.
(Если сэмпл находится во время ввода-вывода или в спящем режиме, он завершится системным вызовом, что очень хорошо. Это то, что вы хотите знать.)
Если есть способ ускорить ваш код (и он почти наверняка есть), вы увидите его в виде строки кода, которая появляется по крайней мере в одном из примеров стека.
Вероятность того, что он появится на любом из образцов, точно равна доле времени, которое он использует.
Так что, если есть сайт вызова или другая строка кода, использующая исправную долю времени, и вы можете избежать ее выполнения, общее время уменьшится на эту долю.
Я не знаю каждого профилировщика, но один, которого я знаю, может сказать вам, что это Увеличение .
Другие могут быть в состоянии сделать это.
Они могут быть более изящными, но они не работают быстрее или лучше, чем ручной метод, когда ваша цель - максимизировать производительность.