Как реализования JVM могут, как Jython и JRuby, бьют своих родных коллег?

StackOverflow https://stackoverflow.com/questions/3488675

Вопрос

Я смотрел это видео здесь, где Роберт Николсон обсуждает P8, внедрение PHP на JVM. В какой-то момент он упоминает, что они стремятся превзойти нативный PHP в исполнении некоторое время в будущем.

Он упоминает, как Jruby и Jython, который начал медленнее, чем их родные коллеги, но в конце концов, превзошли их. Quercus, еще один интерпретатор PHP на требованиях JVM 4x быстрее чем mod_php и тоже стоит заметки.

Значит ли это, что общая идея о том, что JVM медленнее, чем c неправильно, или есть недостатки в оригинальных реализациях C?

Это было полезно?

Решение

Значит ли это, что общая идея о том, что JVM медленнее, чем C, неправильно, или там> недостатки в оригинальных реализациях C?

Немного обоих

JVM уже давно существует и добилась значительного прогресса в эффективности. Коллекция мусора, Just, Caching и другие области более продвинуты, чем в «справочных» реализациях, таких как PHP.

Любой, кто смотрит под капотом PHP, поймет, почему выгоды эффективности легко достичь.

Я лично сомнительно сомнительно, что JVM может превзойти CPY, однако ... но я мог быть не прав ... Я, это до JVM GC быстрее, а Ironpython тоже. Отказ Улучшения производительности могут быть не зависимость от стека C SCOL, например, в Stackless Python. Государства сайта Jython

Jython примерно так же быстро, как CPYthon - иногда быстрее, иногда медленнее. Потому что> большинство JVMS - безусловно, самые быстрые - долго бегут, горячий код будет работать быстрее сверхурочно.

Что я могу оценить как факт, так как JVM достигнет уровня производительности, когда генерируют кэширует, в основном отрицать аспекты более высокого уровня к коду реализации VM (большая часть которого написана на C в любом случае)

Во многих интерпретированных языках, таких как PHP и Python - это просто мосты для эквивалентных C вызовов и погружений в машинный код. В JVM Jitter выполняет аналогичную функцию, уменьшая байткод к эквиваленту машин-кода. В конце концов, промежуточные представления, такие как синтаксис высокого уровня и байткод, обычно уменьшаются до скорости C-скорости или более быстрыми операциями процессора ... Так что все равно более промежуточные шаги который влияет только на задержку для полной эффективности при загрузке нового кода. Приходит точка в памяти, где вы говорите: «Что такое реальная разница?» И ответ - это только процесс, который попадает в него и окончательное представление, которое определяет скорость обмотки стека, алгоритмы сбора мусора, использование регистров и логическое представление, такое как арифметика.

Другие советы

Это не слишком сложно. Если вы пишете свою реализацию в C, вы должны написать свой собственный GC, JIT и более (быть быстрыми и эффективными). Чтобы сделать это действительно хорошо, вам нужно действительно умные люди с большим опытом и дают им много времени.

Я пойду на конечности здесь и скажу, что текущая реализация PHP (не основана не на знаниях внутреннего рабочего, а скорее на тесты, которые я видел и на ведущих людях, которые знают больше о PHP), не говорится искусства. Facebook пытается решить это, но они делают это необычным образом (из-за там особых потребностей и типичное использование PHP см. http://www.stanford.edu/class/ee380/abstracts/100505.html.).

Резюме:Так что, если кто-то реализует PHP в Java (или на любую быструю виртуальную машину), ему не нужно писать супер GC или JIT, чтобы быть быстрым «только» компилятором (который может быть простым).

Есть некоторые намеки о том, что делает виртуальная машина здесь. Отказ Например, похоже на первые проверки виртуальной машины Java, какие части Bytecode выполняются чаще всего, а затем компилирует соответствующие части в нативный код (который затем должен выполнить с аналогичной скоростью, как, например, Commited C Code).

Кстати, PHP скомпилируется в Bytecode или просто интерпретируется с использованием структуры данных в памяти? Перевод PHP в первую очередь в Bytecode исполняемый файл Java Virtual Machine, по одному выгоду от существующих (языковых агностических) оптимизации выполнения Bytecode.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top