Привязывает ли профилировщик некоторые вещи для запуска медленнее, чем другие? - PullRequest
3 голосов
/ 12 апреля 2011

Возможно ли, что при подключении профилировщика к JVM (скажем, VisualVM) некоторые методы будут работать медленнее, не влияя на другие и, таким образом, вызывая искажение результатов, из-за которого он выглядит так, будто определенный фрагмент кода является горячей точкой когда на самом деле это не так. Я буду спрашивать конкретно о рефлексии звонков для примера. Я запускаю некоторый код, который показывает много времени, затрачиваемого на вызовы Spring AOP (в частности, invokeJoinpointUsingReflection), - который, по словам автора, отлично работает в тестировании (с использованием микробенчмарка в коде), но когда они были профилированы, он показал, что этот метод занимает больше времени, чем другие неотражающие методы. (извините, если это немного неясно) Так что мне стало интересно, может ли профилировщик действительно иметь такой эффект и привести разработчика к ложному следу. Не стесняйтесь отвечать с любыми примерами, часть отражения - только мой пример.

Ответы [ 4 ]

3 голосов
/ 12 апреля 2011

Профилировщики регулярно дают неверную информацию, но в целом они обычно правы.Они склонны искажать результат в очень простых методах, которые могут быть дополнительно оптимизированы, если профилирование не было включено.

Если вы сомневаетесь, я предлагаю вам использовать другой профилировщик, например, YourKit (версия для оценки должна подойти)Он имеет более легкий вес записи, но может иметь те же проблемы.

3 голосов
/ 12 апреля 2011

Гейзенберг замечательно заметил, что сбор информации из системы всегда мешает ей, поэтому вы не можете получить беспрепятственное наблюдение.(Таким образом, термин программного обеспечения "Гейзенбаг").Да, сбор информации о профилировании может привести к тому, что фактическая производительность будет изменена таким образом, что это приведет к неправильному направлению.

Является ли это важным для вашей конкретной JVM или профилировщика, и насколько часто возникают помехиинженерный.

0 голосов
/ 12 апреля 2011

Некоторые профилировщики требуют шага калибровки, например, NetBeans и VisualVM . Вы можете проверить марку и настройки для выбранного вами профилировщика.

0 голосов
/ 12 апреля 2011

Большинство профилировщиков основаны на выборке, и, следовательно, чем больше данных вы собираете, тем точнее результаты.Насколько я знаю, нет никакого смещения за или против методов, написанных исключительно на Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...