Означает ли это, что общая идея о том, что JVM медленнее, чем C, неверна, или в первоначальных реализациях C есть недостатки?
Немного из обоих
JVM существует уже давно и добилась значительного прогресса в эффективности. Сборка мусора, джиттинг, кэширование и другие области более продвинуты, чем в «справочных» реализациях, таких как PHP.
Любой, кто заглянет под капот PHP, поймет, почему легко добиться повышения эффективности.
Я лично сомневаюсь, что JVM может превзойти CPython, однако ... но я могу ошибаться ... Да, это связано с тем, что GV JVM работает быстрее, и IronPython тоже . Улучшения производительности могут быть вызваны не зависимостью от стека вызовов C, например в Python без стека. Сайт Jython сообщает
Jython примерно так же быстр, как CPython - иногда быстрее, иногда медленнее. Поскольку большинство JVM - конечно, самые быстрые - работают долго, горячий код будет работать быстрее со временем.
То, что я могу оценить как факт, поскольку JVM достигнет уровней производительности C при генерации кэшей и т. Д., В основном сводит на нет аспекты более высокого уровня в коде реализации виртуальной машины (большая часть которого написана на C в любом случае)
Во многих интерпретируемых языках, таких как PHP и Python, это просто мосты к эквивалентным вызовам C и погружение в машинный код. В JVM Jitter выполняет аналогичную функцию, сводя байт-код к эквивалентам машинного кода. В конце концов, промежуточные представления, такие как высокоуровневый синтаксис и байт-код, обычно все равно сводятся к C-скорости или более быстрым процессорам ЦП ... так что все равно, просто больше промежуточных шагов , которые влияют только на задержка до полной эффективности при загрузке нового кода. В оперативной памяти наступает момент, когда вы говорите «в чем реальная разница?» и ответ - только процесс, который получает это там и окончательное представление, которое определяет скорость намотки стека, алгоритмы сборки мусора, использование регистра и логическое представление, такое как арифметика.