Reklama
Wirtualna maszyna Java (JVM) jest prawdziwym droperem, gdy programujesz w Javie. W przeciwieństwie do tego, co wskazuje nazwa, wirtualną maszynę Java można napotkać również w odniesieniu do innych języków programowania.
Zasadniczo nie trzeba wiedzieć, czym jest wirtualna maszyna Java, ani nawet co robi, aby móc programować w Javie. Z drugiej strony zapoznanie się z wewnętrznym działaniem maszyny pomaga zwiększyć zrozumienie i ogólny wgląd.
W tym artykule omówiono ideę wirtualnej maszyny Java, jej możliwości i najważniejsze zalety i wady. Chociaż starałem się to uprościć, a literatura na ten temat jest zdecydowanie bardziej zaawansowana, spodziewane jest podstawowe zrozumienie języka Java i programowania.
Języki wysokiego poziomu
Semantyka języka programowania została zaprojektowana tak, aby była zbliżona do naszego języka naturalnego, przy jednoczesnym zachowaniu zwięzłości i łatwości interpretacji dla maszyny. Jak zapewne wiesz, język programowania całkowicie różni się od kodu maszynowego, zestawu instrukcji, których komputer używa do konstruowania i uruchamiania programu. To nazywamy
języki wysokiego poziomu; jeden lub wiele poziomów abstrakcji z kodu maszynowego.Przed uruchomieniem należy najpierw zinterpretować kod wysokiego poziomu. Wiele interfejsów programistycznych kompiluje się wcześniej (Kompilacja AOT) dla określonej platformy. Dzięki temu program jest bardziej wydajny w czasie wykonywania, ale znacznie mniej kompatybilny z różnymi platformami. Java natomiast działa z językiem pośrednim o nazwie Kod bajtowy Java i Maszyna wirtualna Java.
JVM i Java Bytecode
Podczas budowania projektu Java tłumaczy kod źródłowy (zawarty w *.Jawa pliki źródłowe) na kod bajtowy Java (najczęściej zawarty w plikach * .class). To przybliża kod wysokiego poziomu do kodu maszynowego, ale jeszcze go nie ma. Ten kod bajtowy to zbiór kompaktowych instrukcji; łatwiejszy do interpretacji przez maszynę, ale mniej czytelny.
Po uruchomieniu aplikacji Java na komputerze, telefonie komórkowym lub innej platformie obsługującej język Java zasadniczo przekazuje się ten kod bajtowy Java na maszynę wirtualną Java. Tłumacz na wirtualnej maszynie Java zwykle zaczyna kompilować cały kod bajtowy w czasie wykonywania, zgodnie z zasadami tzw. kompilacja just-in-time. Powoduje to typowe, choć często niewielkie opóźnienie przy otwieraniu aplikacji Java, ale ogólnie poprawia wydajność programu w porównaniu do interpretowana kompilacja.
Główną zaletą tego systemu jest zwiększona kompatybilność. Ponieważ aplikacje działają na maszynie wirtualnej zamiast bezpośrednio na sprzęcie, programista może programować i zbuduj swoją aplikację raz, która może być następnie uruchomiona na każdym urządzeniu z implementacją Java Virtual Maszyna. Ta zasada zrodziła hasło Java: „Napisz raz, biegnij wszędzie.”
Pro: Kompatybilność i większe bezpieczeństwo
Oprócz zgodności kodu, wirtualna maszyna Java ma inne zalety. Jednym z najważniejszych z nich jest względne bezpieczeństwo programów Java w wyniku wirtualnej maszyny Java. Bezpieczeństwo, co oznacza, że program działający na maszynie wirtualnej jest znacznie mniej podatny na uszkodzenie systemu operacyjnego użytkownika lub uszkodzenie plików danych, jeśli wystąpią błędy.
Con: Różne implementacje JVM i debugowanie
Jednym z głównych zarzutów dotyczących zgodności kodu i wirtualnej maszyny Java jest wiele różnych implementacji tego drugiego. Widzisz, wirtualna maszyna Java nie jest jednym oprogramowaniem. Oracle, właściciele Javy, wdrożyli wirtualną maszynę Java, ale inni mogą to zrobić, jeśli spełni ona różne roszczenia praktyczne i umowne.
Te różne implementacje oznaczają, że kod może działać płynnie na jednej wirtualnej maszynie Java, ale zawieszać się i wypalać na innej. Chociaż w praktyce możesz napisać kod raz i uruchomić go wszędzie, czasem bardziej skomplikowany kod wciąż musi być debugowany w różnych implementacjach wirtualnej maszyny Java, aby zapewnić prawidłowe działanie.
Czy masz jakieś doświadczenie w pracy z wirtualną maszyną Java? Jeśli tak, to czy jest coś, co przegapiłem tutaj, o czym należy wspomnieć?
Źródło zdjęcia: Michaelaw, Dcoetzee
Jestem pisarzem i studentem informatyki z Belgii. Zawsze możesz wyświadczyć mi przysługę dobrym pomysłem na artykuł, rekomendacją książki lub pomysłem na przepis.