2010-08-09 11 views

Odpowiedz

15

Tak, jest różnica.

maszyna wirtualna Java:

Oprogramowanie „silnik wykonanie”, który bezpiecznie i kompatybilność wykonuje kody bajt plików klas Java na mikroprocesorze (czy w komputerze lub w innym urządzeniu elektronicznym).

Java tłumacza:

moduł, który dekoduje i wykonuje na przemian każdą oświadczenie w jakimś ciele kodu. Interpreter Javy dekoduje i wykonuje kod bajtowy dla wirtualnej maszyny Java.

Interpreter Javy jest w rzeczywistości częścią JVM. Maszyna wirtualna to nie tylko wykonywanie bajtów, ma wiele zadań do wykonania. To pełnoprawne środowisko jest określane jako JVM.

Sprawdź:

+0

"Interpreter Javy jest w rzeczywistości częścią JVM." Masz na myśli, że interpreter Java * jest częścią JVM ... ponieważ JVM nie widzi nawet kodu Java. – flow2k

+0

Chociaż, to też nie byłoby całkowicie poprawne, ponieważ, jak powiedziałeś, JVM jest czymś więcej niż tylko interpretatorem - robi optymalizacje z kompilatorem JIT, który w przeciwnym razie uniemożliwiłby Java dla aplikacji z wydajnością empahsis. – flow2k

0

Po pierwsze kod z (teoretycznie) dowolnego języka można skompilować do kodu bajtowego JVM, aby umożliwić wykonanie w tym środowisku. Interpreter Javy może uruchamiać tylko kod Java.

+0

Myślę, że to jest nieprawidłowe. O ile mi wiadomo, interpreter Java nie jest bardziej związany z Javą niż JVM. Rzeczywisty kod języka Java jest tradycyjnie kompilowany, po nim jest kod bajtowy, który jest interpretowany i/lub w inny sposób wykonywany w/przez JVM. –

0

Wywołanie wirtualnej maszyny Java tłumacza Javy jest niepoprawne. JVM jest kompilatorem JIT, który kompiluje i uruchamia kod bajtowy. Inne języki mogą być kompilowane do kodu bajtowego dla JVM. Wikipedia article detailing such languages.

+1

To nie jest ściśle prawda. JVM uruchomi kod w trybie interpretacji na chwilę przed podjęciem decyzji, które bity mają zostać skompilowane. Tak, tak, JVM jest interpreter Java Bytecode (plik klasy). – dty

+0

@Danny: Nie ma "JVM". Istnieje wiele implementacji JVM od różnych dostawców na różnych platformach, które niekoniecznie wszystkie działają tak samo. –

+1

Hej, nie byłem pierwszą osobą, która wspomniała "JVM"! Zależy od tego, co masz na myśli mówiąc "pracuj tak samo". Wszystkie wykonują kod bajtowy i dostarczają mapowania do podstawowych funkcji systemu operacyjnego, takich jak wątki, pliki itp. Niektóre z nich nie mają JIT (co mogłoby dodać do mojego argumentu, że powiedzenie "JVM jest kompilatorem JIT" jest niedokładne), niektóre mają różne modele nitek (w porównaniu do starego modelu m: n JRockita), niektóre mają różne algorytmy GC, ale wszystkie w zasadzie robią to samo. Ale NIE jest właściwe mówienie "JVM jest kompilatorem JIT". – dty

0

Jak rozumiem ...

Interpreter Java wykonuje linie kodu bajtowego jako polecenia do wykonania. Kod bajtowy jest wykonywany.

JVM pobiera kod bajtu i generuje kod maszyny. Kod bajtowy jest kompilowany do kodu maszynowego, a kod maszyny jest wykonywany.

+0

** JVM ** ** niekoniecznie musi zawierać kompilator JIT. Niektóre z tych, które zawierają kompilator JIT, mają opcję wyłączenia go. '-Xint' na moim. – JeremyP

0

maszyna wirtualna Java to procesor wirtualny i interpreter Java jest java tool.thanks

+3

Edytuj swoją odpowiedź, dodając kilka cennych informacji i referencji. –

8

Mówiąc najprościej, JVM interpretuje kodu bajtowego i interpreter Javy interpretuje Java. Są różne, ponieważ kod bajtowy i Java to różne języki.

Kod Bytecode to język niskiego poziomu, na przykład kod maszynowy. Kod bajtowy powinien być uruchamiany przez program zwany interpreter kodu bajtowego, zwany także maszyną wirtualną . Kod bajtowy ma być łatwy do interpretacji.

Java to język wyższego poziomu, taki jak C lub Python. Języki te można również interpretować: wystarczy napisać program, który może uruchomić swój kod. Nie musi zawierać kodu bajtowego. Tyle, że języki wyższego poziomu są trudniejsze do interpretacji bezpośrednio.

Java jest zwykle "interpretowana" poprzez przetłumaczenie programu Java na program kodu bajtowego jako pierwszy. Następnie maszyna wirtualna Java Virtual Machine (JVM) uruchamia kod bajtowy.

Ale można interpretować dowolny język w ten sposób. JVM może interpretować inne języki, jeśli przetłumaczysz je na właściwy bajt.

Można również interpretować język programowania bezpośrednio, bez kodu bajtowego. Niektórzy tłumacze BASIC po prostu szukają instrukcji BASIC w kodzie źródłowym i wykonują je. Nie robią najpierw nowego programu w innym języku. Jeśli zrobiłbyś to samo dla Javy, byłby to interpreter Javy, ale nie JVM.