W przeszłości używałem C ++ jako języka programowania. Wiem, że kod napisany w C ++ przechodzi przez proces kompilacji, aż stanie się „kodem maszynowym” kodu wynikowego.
Chciałbym wiedzieć, jak działa Java w tym zakresie. W jaki sposób kod Java napisany przez użytkownika jest uruchamiany przez komputer?
java
compilation
interpretation
wyświetlana nazwa
źródło
źródło
Odpowiedzi:
Implementacje języka Java zazwyczaj wykorzystują dwustopniowy proces kompilacji. Kod źródłowy Java jest kompilowany do kodu bajtowego przez kompilator Java. Kod bajtowy jest wykonywany przez wirtualną maszynę języka Java (JVM). Nowoczesne maszyny JVM wykorzystują technikę zwaną kompilacją Just-in-Time (JIT) do kompilowania kodu bajtowego do natywnych instrukcji rozumianych przez sprzętowy procesor CPU w locie w czasie wykonywania.
Niektóre implementacje JVM mogą zdecydować się na interpretację kodu bajtowego zamiast kompilacji JIT do kodu maszynowego i bezpośredniego uruchamiania. Chociaż jest to nadal uważane za „interpreter”, różni się znacznie od interpreterów, które odczytują i wykonują kod źródłowy wysokiego poziomu (tj. W tym przypadku kod źródłowy Javy nie jest interpretowany bezpośrednio, kod bajtowy danych wyjściowych kompilatora Javy jest).
Jest technicznie możliwe skompilowanie Java do kodu natywnego z wyprzedzeniem i uruchomienie wynikowego pliku binarnego. Istnieje również możliwość bezpośredniej interpretacji kodu Java.
Podsumowując, w zależności od środowiska wykonawczego, kodem bajtowym może być:
źródło
Kod napisany w Javie to:
Kiedy java interpretuje kod bajtowy, a kiedy go kompiluje? Kod aplikacji jest początkowo interpretowany, ale JVM monitoruje, które sekwencje kodu bajtowego są często wykonywane i tłumaczy je na kod maszynowy w celu bezpośredniego wykonania na sprzęcie. W przypadku kodu bajtowego, który jest wykonywany tylko kilka razy, oszczędza to czas kompilacji i zmniejsza początkowe opóźnienie; w przypadku często wykonywanych kodów bajtowych kompilacja JIT jest używana do uruchamiania z dużą prędkością, po początkowej fazie powolnej interpretacji. Ponadto, ponieważ program spędza większość czasu na wykonywaniu mniejszości swojego kodu, skrócony czas kompilacji jest znaczący. Wreszcie, podczas wstępnej interpretacji kodu, statystyki wykonania można zebrać przed kompilacją, co pomaga w lepszej optymalizacji.
źródło
Terminy „język interpretowany” lub „język kompilowany” nie mają sensu, ponieważ każdy język programowania może być interpretowany i / lub kompilowany.
Jeśli chodzi o istniejące implementacje języka Java, większość z nich obejmuje etap kompilacji do kodu bajtowego , więc obejmują one kompilację. Środowisko wykonawcze może również dynamicznie ładować kod bajtowy, więc zawsze potrzebna jest pewna forma interpretera kodu bajtowego. Ten interpreter może z kolei wewnętrznie używać kompilacji do kodu natywnego lub nie.
Obecnie częściowa kompilacja just-in-time jest używana w wielu językach, które kiedyś były uważane za „interpretowane”, na przykład w JavaScript.
źródło
Java jest kompilowana do kodu bajtowego, który następnie trafia do maszyny wirtualnej Java, która ją interpretuje.
źródło
Java jest skompilowanym językiem programowania, ale zamiast bezpośrednio kompilować do wykonywalnego kodu maszynowego, kompiluje się do pośredniej postaci binarnej zwanej kodem bajtowym JVM. Kod bajtowy jest następnie kompilowany i / lub interpretowany w celu uruchomienia programu.
źródło
W pewnym sensie z obu. Najpierw skompilowano java (niektórzy woleliby powiedzieć „przetłumaczone”) do kodu bajtowego, który następnie albo skompilowano, albo zinterpretowano w zależności od nastroju JIT.
źródło
Java zajmuje się zarówno kompilacją, jak i interpretacją,
W Javie programy nie są kompilowane do plików wykonywalnych ; są one kompilowane do kodu bajtowego (jak omówiono wcześniej), który JVM (wirtualna maszyna języka Java) interpretuje / wykonuje w czasie wykonywania. Kod źródłowy Java jest kompilowany do kodu bajtowego, gdy używamy kompilatora javac. Kod bajtowy zostanie zapisany na dysku z rozszerzeniem pliku .class .
Gdy program ma zostać uruchomiony,
kod bajtowy jest konwertowany,a kod bajtowy może być konwertowany za pomocą kompilatora just-in-time (JIT). Rezultatem jest kod maszynowy, który jest następnie wprowadzany do pamięci i wykonywany.Javac to kompilator języka Java, który kompiluje kod Java do kodu bajtowego. JVM to wirtualna maszyna Java, która uruchamia / interpretuje / tłumaczy kod bajtowy na natywny kod maszynowy. W Javie, chociaż jest uważany za język interpretowany, może używać kompilacji JIT (Just-in-Time), gdy kod bajtowy jest w JVM. Kompilator JIT odczytuje kody bajtowe w wielu sekcjach (lub w całości, rzadko) i kompiluje je dynamicznie do kodu maszynowego, dzięki czemu program może działać szybciej, a następnie buforowany i ponownie używany później bez konieczności ponownej kompilacji. Kompilacja JIT łączy więc szybkość kompilowanego kodu z elastycznością interpretacji.
Interpretowany język jest rodzajem języka programowania, dla którego większość implementacji bezpośredniego i swobodnego wykonywania instrukcji, bez uprzedniego kompilacji programu na instrukcje maszynowe językowych. Interpreter wykonuje program bezpośrednio, tłumacząc każdą instrukcję na sekwencję jednego lub więcej podprogramów już skompilowanych na kod maszynowy.
Skompilowany język jest językiem programowania, którego implementacje są zwykle kompilatory (tłumacze, które generują kod maszynowy z kodem źródłowym), a nie tłumaczy (krok po kroku wykonawcami kodu źródłowego, gdzie nie tłumaczenie pre-runtime odbywa)
We współczesnych implementacjach języków programowania, takich jak Java, coraz popularniejsze jest, aby platforma zapewniała obie opcje.
źródło
Java to język kompilowany bajtowo, przeznaczony dla platformy zwanej Java Virtual Machine, która jest oparta na stosie i ma kilka bardzo szybkich implementacji na wielu platformach.
źródło
Cytat z: https://blogs.oracle.com/ask-arun/entry/run_your_java_applications_faster
Więc powiedziałbym, że Java jest zdecydowanie językiem kompilowanym.
źródło