Я стал все более и более удобным программированием на Java, чем с С++ или C. Я надеюсь получить представление о производительности, вызванной использованием интерпретатора JVM, в отличие от выполнения одного и того же "проекта" изначально. Я понимаю, что здесь есть определенный уровень субъективности; качество программы будет в значительной степени зависеть от хорошей реализации. Меня интересуют следующие аспекты в общем смысле:
-
При использовании интерпретатора должна быть базовая линия для накладных расходов. Есть ли общее правило для запоминания? 10% 15%? (Я вытащил эти цифры из воздуха). Я читал случайный блог о том, что Java-код почти так же быстро, как и собственный код, но я думаю, что это может быть предвзято.
-
Собирает ли сборщик мусора JVM значительные накладные расходы для производительности во время выполнения? Я знаю, что приложения Cocoa начали использовать модель сбора мусора, и я согласен с тем, что это упрощает программирование, но по какой цене?
-
Каковы накладные расходы на выполнение системных вызовов с Java? Например, создание объекта Socket в отличие от API-интерфейса сокета.
-
Наконец, я помню, где-то читал, что реализация JVM является однопоточной. Если это правда (что я скептически отношусь), означает ли это, что потоки Java действительно не являются настоящими потоками? Является ли поток java в общем случае базовым потоком, предоставленным ядрами? Применяется ли Java-приложение так же, как собственное приложение будет работать с несколькими ядрами/несколькими процессорами?
Любые советы разработчика, которые понимают тонкости JVM и производительности Java-программы, будут высоко оценены. Спасибо.