Schemat działania platformy Java

Java to zarówno język programowania jak i platforma, na której uruchamiany jest skompilowany kod Javy.

Platforma ta składa się z Wirtualnej Maszyny Javy (JVM - Java Virtual Machine) oraz środowiska wykonawczego wspierającego JVM przy wykonywaniu instrukcji maszynowych konkretnej platformy sprzętowej.

 

JVM jest w ogólności zbudowana z następujących modułów:

  • moduł ładowania klas (Classloader)
  • moduł weryfikacji kodu bajtowego (Bytecode Verifier)
  • modułu interpretera i kompilatora JIT

 

 

 

  1. Do wirtualnej maszyny Javy (JVM) trafia seria plików .class. W jednym z nich występuje metoda main i ta klasa jest traktowana jako główna.
  2. Maszyna wirtualna JVM za pomocą modułu Classloader pobiera pliki klas z różnych źródeł (dysku lokalnego, sieci itp.) i ładuje zapisany w nich kod bajtowy do pamięci.
  3. Moduł weryfikacji kodu bajtowego sprawdza poszczególne instrukcje kodu bajtowego, aby zapewnić ich zgodność i uniemożliwić naruszenie zasad bezpieczeństwa.
  4. Jeśli weryfikator uzna kod za niezgodny lub niebezpieczny, zakończy wykonywanie programu i nastąpi zakończenie działania wirtualnej maszyny Javy.
  5. ...w przeciwnym wypadku interpreter zidentyfikuje kolejną pojedynczą instrukcję i wykona odpowiadające jej instrukcje za pomocą kodu maszynowego specyficznego dla danej platformy sprzętowej / systemowej.
  6. Sekwencje instrukcji, które są wykonywane częściej niż pozostałe, zostają skompilowane przez kompilator JIT (Just In Time compiler), aby przyspieszyć ich wykonywanie.
  7. Podczas wykonywania programu interpreter zazwyczaj napotyka żądania wykonania kodu bajtowego zapisanego w innym pliku .class będącym częścią programu lub używanej biblioteki. W takiej sytuacji moduł Classloader ładuje odpowiedni plik .class, a następnie weryfikator kodu sprawdza poprawność kodu bajtowego zanim zostanie wykonany. Podczas działania programu mogą występować instrukcje kodu bajtowego, które żądają np. odczytania określonego pliku, wyświetlenia odpowiednich danych na monitorze, odtworzenia dźwięku lub wykonania innych czynności wymagających kooperacji z używaną platformą sprzętową/systemową. JVM korzysta z technologii JNI (Java Native Interface) aby wywołać odpowiednie instrukcje używanej platformy sprzętowej.