Я регулярно просматриваю высокопроизводительную Java-программу моей команды, так как неэффективные функции могут привести к серьезным замедлениям. Чтобы сделать это, я держать порт открытым для присоединения Java VisualVM, используя следующие аргументы машины Java:Выполняет ли профилирование на Java собственные проблемы с производительностью?
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9011 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=localhost
сегодня Это меня поразило: делает профилирование программы Java - или просто держать порт открытым ради профилирования - ввести дополнительные сокращения скорости? Если это так, некоторые методы профилирования более дорогостоящие, чем другие? Какое снижение скорости или накладные расходы - например, 1% времени выполнения, 10% времени выполнения - нормально ожидать?
В то время как мой вопрос предназначен для более широкой аудитории Java, я хочу отметить, что наша программа a - это память, но интенсивно используемая в CPU симуляция: в частности, существует огромное количество небольших, но дорогостоящих вызовов функций, , Возможно, оптимизация в нашем случае стоит дорого, учитывая огромное количество вызовов функций, но тем более для других?
Да, профилирование системы несет накладные расходы. Точно, сколько зависит от слишком большого количества факторов (версия JVM, используемый профилировщик, количество вызовов, стек и т. Д.), Чтобы надежно предсказать. Однако накладные расходы должны быть пропорционально постоянными. –
Оценки любого стадиона? <10%? <3%? Я ценю, что есть много факторов, но если в большинстве случаев это незначительно, то я не потеряю сон над ним. :) –
Хорошо, что вы профилируете. Тем не менее, когда я слышу, что люди ищут «неэффективные» или «медленные» функции, я обеспокоен тем, что по моему опыту реальные проблемы с производительностью не принимают эту форму. Они берут [* более обобщенную форму *] (http://stackoverflow.com/a/927773/23771), связанный с * почему * время расходуется, а не * где *. Мышление только времени, проведенного подпрограммами, не раскрывает их. –