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