Java-реализация... JVM?

Некоторое время назад я нашел проект MJVM. К сожалению, этот проект был оставлен автором (я спросил Igor по электронной почте).

Интересно, существует ли (продолжение) проект с открытым исходным кодом полной реализации JVM в Java, подобный этому.

Под "полным" я имею в виду не только эмулировать мобильные устройства.

Ответ 1

Jikes RVM, вероятно, самая известная реализация JVM, написанная на Java. Однако его реализация на низком уровне просто состоит из вызовов статических методов в "волшебный" интерфейс, который специально обрабатывается компилятором и преобразуется в собственный код.

Maxine VM (разработанный Sun Labs, теперь Oracle Labs), является реальной метациркулярной VM, в которой не только все написано в Java, но в компиляторе нет специальной оболочки. Более того: не только Maxine VM, написанная на Java, она даже запускается сама по себе! Это может показаться сумасшедшим, и, честно говоря, я понятия не имею, как это работает, но оно основано на Klein VM (разработан Sun Labs), что делает то же самое для языка программирования Self.

Это имеет некоторые очень интересные свойства: поскольку сам JVM является частью кодовой базы, которую интерпретирует JVM, той же кодовой базой, к которой принадлежит пользовательский код, это означает, что она может делать такие оптимизации, как встраивание через границу VM. IOW: он может встроить код VM в код пользователя и наоборот. Это также означает, что сама виртуальная машина подвержена такому же профилированию во время выполнения и динамической оптимизации, что – на других виртуальных машинах (даже включая Jikes) – только пользовательский код, что означает, что сама виртуальная машина постоянно перекомпилируется и повторно оптимизируется для адаптации к изменениям нагрузок, загрузке новых классов, изменению профилей, изменению шаблонов использования и т.д.

В виртуальных машинах, таких как HotSpot, JRockit, J9 и другие, эти оптимизации невозможны по той простой причине, что JVM знает, как оптимизировать байт-код JVML, но VM не написана на Java. Но даже в Jikes это невозможно, поскольку, в то время как виртуальная машина написана на Java, она статически компилируется в собственный код до ее запуска, а сам код самой VM не является частью кода, который видит VM.

Squawk VM - это также JVM, разработанная Sun Labs, теперь Oracle Labs. В отличие от Maxine, который примерно похож на J9, HotSpot или JRockit в целевой аудитории, Squawk более похож на KVM (первоначально разработанный Sun, а теперь и Oracle), то есть нацелен на встроенные устройства с ограниченными ресурсами. Squawk также вдохновлен Клейном. В отличие от Maxine, он имеет небольшой слой абстракции, написанный на C. Но имейте в виду, что Maxine требует, чтобы ОС запускалась, тогда как Squawk работает без ОС. Итак, в некотором смысле Squawk еще чище, чем Maxine, потому что многие части, которые не являются частью Maxine, а часть ОС (где они часто реализуются на языках C, С++ или других языках низкого уровня), на самом деле являются частью Squawk сам. Драйверы устройств, например, написаны на Java. Только небольшой уровень абстракции аппаратного обеспечения и библиотеки ввода-вывода записываются на C.

Ответ 2

Jikes RVM - это JVM, написанная на Java, используемая для исследований и активно работающая.

Ответ 3

JNode - это операционная система JVM +, написанная на Java, которая работает на одном ПК с ОС x86 или виртуальном. Проект SVN был довольно неактивен в последнее время (примерно последние 6 месяцев), но я считаю, что в проекте есть активность в зеркалах GIT.