Как JVM может быть записана в Java

Я кратко читал о Maxine, которая является реализацией JVM с открытым исходным кодом записанный в Java. Это звучит круговым мне. Если Java потребует, чтобы виртуальная машина работала в, как может сама виртуальная машина писаться в Java (РАЗВЕ, то код VM не потребует VM, в котором можно работать и так далее?).

Править: Хорошо, таким образом, я вижу, что пропустил то, что Java не должен работать в VM. Как затем каждый объясняет, как компилятор LISP может быть записан в LISP? Или это должно быть новым вопросом в целом?

37
задан ewernli 15 August 2012 в 11:31
поделиться

8 ответов

Ваше предположение, что Java требует виртуальной машины , неверно, начиная с .

15
ответ дан 27 November 2019 в 04:58
поделиться

Я перепрофилировал методы faseIn и faseOut. Кажется, я не получаю черный цвет на изображении PNG. Родительский div не требуется. По-прежнему используется как jQuery.

http://www.pagecolumn.com/javascript/fade.htm

-121--1100564-

В качестве общей концепции кэширование не подразумевает стратегию реализации. Распространенная идея заключается в том, что вы сохраняете информацию где-то, которая обеспечивает вам более эффективный доступ, чем то, откуда вы получили данные изначально.

Поэтому в этом случае более эффективно получать данные с диска, чем запрашивать Twitter (как правило, задержка сети больше, чем задержка ввода-вывода диска).

Кроме того, получение данных из памяти более эффективно, чем получение информации с диска (поскольку задержка памяти меньше, чем задержка ввода-вывода диска).

При этом вы можете хранить значения из Twitter в памяти, если хотите, или в файле на диске, если вам нужно, чтобы значения сохранялись, кроме, скажем, завершения работы. Как это сделать, зависит от вас (диск или память, расширения, формат и т.д.). Это твой тайник.

Вы должны быть осторожны в том, что кэш становится устаревшим. Это происходит, когда имеющаяся в кэше информация не синхронизирована с исходным источником данных. Необходимо определить для приложения, насколько приемлемы устаревшие данные, и при необходимости запросить замену значений кэша.

-121--4195943-

См. загрузка .

3
ответ дан 27 November 2019 в 04:58
поделиться

Вы спрашиваете о курице и яйце.

Прочтите: http://en.wikipedia.org/wiki/Bootstrapping_%28compilers%29

13
ответ дан 27 November 2019 в 04:58
поделиться

Это своего рода «уууаааа, как это может работать ???» - но я думаю, что вы описываете явление, известное как «самообслуживание»:

Языки (или инструментальные цепочки / платформы) не начинаются как самостоятельный хостинг - они начинают жизнь, будучи построенными на существующей платформе: в в определенный момент они становятся достаточно функциональными, чтобы можно было писать программы, которые понимают синтаксис, в котором они сами написаны.

В классической книге AWK есть отличный пример, который вводит программу AWK, которая может анализировать ( урезанная версия как это бывает) другие программы AWK: см. ссылку ниже.

В книге «Красивый код» есть еще один пример, в котором есть программа Javascript, которая может анализировать Javascript.

Я думаю, что следует помнить об этом - если у вас есть (скажем) JVM, написанная на Java, которая, следовательно, может запускать байтовый код Java: JVM, которая запускает саму Java JVM, должна быть изначально размещена (возможно, эта JVM была написана в 'C', а затем скомпилирован в машинный код): это верно в любом случае, в конечном итоге, для программы с собственным хостингом - где-то по ходу.

Таким образом, тайна удалена - потому что в какой-то момент под всем работает программа с машинным кодом.

Это своего рода эквивалент возможности описать английский (и т.д.) язык, используя сам английский язык .... возможно ...

http://www.amazon.co.uk/AWK-Programming- Language-Alfred-Aho / dp / 020107981X / ref = sr_1_fkmr0_3? Ie = UTF8 & qid = 1266397076 & sr = 8-3-fkmr0

http://www.amazon.co.uk/gp/search/ref=a9_sc_1?rh= i% 3Astripbooks% 2Ck% 3Abeautiful + code & keywords = beautiful + code & ie = UTF8 & qid = 1266397435

http://en.wikipedia.org/wiki/Self-hosting

0
ответ дан 27 November 2019 в 04:58
поделиться

Вероятно, самое близкое, что вы можете получить это: (Пожалуйста, не понижайте меня; это просто академическое упражнение. Конечно, нельзя использовать какие-либо локальные переменные в теле этих искусственных с блоками!)

struct Bar {
    int field;
};

void foo( Bar &b ) {
    struct withbar : Bar { void operator()() {
        cerr << field << endl;
    }}; static_cast<withbar&>(b)();
}

Или, более демонически,

#define WITH(T) do { struct WITH : T { void operator()() {
#define ENDWITH(X) }}; static_cast<WITH&>((X))(); } while(0)

struct Bar {
    int field;
};

void foo( Bar &b ) {
    if ( 1+1 == 2 )
        WITH( Bar )
            cerr << field << endl;
        ENDWITH( b );
}

или в C++ 0x

#define WITH(X) do { auto P = &X; \
 struct WITH : typename decay< decltype(X) >::type { void operator()() {
#define ENDWITH }}; static_cast<WITH&>((*P))(); } while(0)

        WITH( b )
            cerr << field << endl;
        ENDWITH;
-121--1698009-

код Java может быть скомпилирован непосредственно в машинный код, так что виртуальная машина не нужна.

-121--2052052-

Вы можете ознакомиться с хорошо зарекомендовавшим себя методом начальной загрузки компиляторов. Думаю, это началось в 70-е...

0
ответ дан 27 November 2019 в 04:58
поделиться

JVM, необходимая для начальной загрузки JVM, написанной на Java, вероятно, не требует большого количества функций (таких как сборка мусора и JIT), может быть очень простой. Затем все более продвинутые функции могут быть реализованы на Java (что, кажется, является целью Maxine, чтобы экспериментировать с новыми идеями в технологии JVM).

Кроме того, Maxine действительно содержит код C, который, я думаю, составляет минимальную среду выполнения, которая используется для работы остальной части Maxine. Я так понимаю, что интересные части (JIT-компилятор, сборка мусора) полностью реализованы на Java.

7
ответ дан 27 November 2019 в 04:58
поделиться

На прошлой неделе я посмотрел на Максин и подумал о том же:)

Из документации Максин :

1 Создание загрузочного образа

Теперь давайте создадим [загрузочный образ]. На этом шаге Maxine запускается на хосте JVM для настройки прототипа, затем компилирует свой собственный код и данные для создания исполняемой программы для { {1}} целевая платформа.

2 Запуск Maxine

Теперь, когда Maxine скомпилировал себя, мы можем запустить его как стандартную виртуальную машину Java. Команда max vm обрабатывает детали класса и пути к библиотекам, а предоставляет интерфейс, аналогичный стандартной команде запуска Java .

2
ответ дан 27 November 2019 в 04:58
поделиться

Код Java может быть скомпилирован непосредственно в машинный код, чтобы виртуальная машина не нужен.

2
ответ дан 27 November 2019 в 04:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: