Если я включу создание отладочной информации с помощью Javac, файлы классов будут на 20-25% больше. Влияет ли это на производительность при запуске программы Java? Если да, то на каких условиях и в каком количестве. Я ожидаю небольшого влияния на загрузку классов, потому что файлы больше, но это должно быть минимальным.




На любом языке отладочная информация - это метаинформация. Он по своей природе увеличивает размер объектных файлов, тем самым увеличивая время загрузки. Во время выполнения вне отладчика эта информация фактически полностью игнорируется. Как указано (хотя и не ясно) в Спецификация JVM, отладочная информация хранится вне потока байт-кода. Это означает, что во время выполнения в файле класса нет никакой разницы. Если вы хотите быть уверенным, попробуйте :-).
Пс. Часто для отладки имеет смысл отключить оптимизацию. Это делает влияет на производительность.
Правильный. Это влияет на время загрузки, но не на время выполнения.
Действительно, у компилятора sun java нет флага оптимизации. Оптимизация в основном происходит во время работы точки доступа. Оптимизация во время компиляции может фактически затруднить оптимизацию горячих точек (с использованием полной информации, доступной только во время компиляции).
Само по себе отключение отладки не должно иметь никакого значения. Но как только вы отключите отладку и включите оптимизацию, вы должны увидеть разницу, поскольку это дает некоторые статические оптимизации во время компиляции. Таким образом, даже ваш код, оптимизированный для горячих точек, становится быстрее во время выполнения.
Но пока что компромисс между получением смысла полных трассировок стека или большей производительностью для пользователя, я всегда голосовал за трассировки стека. В конце концов, пользователи готовы тратить 1000 долларов в год на получение более быстрой машины, но не готовы тратить 15 минут на то, чтобы дать вам содержательные сообщения об ошибках для решения их проблем.
Спустя годы я с большей готовностью буду ценить свои 15 минут выше, чем 1000 $ пользователя. :)
Имейте в виду, что поскольку JDK1.3 javac игнорирует любые флаги оптимизации, «оптимизация времени компиляции не требуется»
У javac все еще есть -O? Последнее, что я помню, это был эквивалент -g: none.