Od Java 21 standardową częścią platformy są wątki wirtualne (virtual threads). Są to lekkie wątki zarządzane przez środowisko uruchomieniowe, których celem jest umożliwienie tworzenia aplikacji obsługujących bardzo dużą liczbę współbieżnych zadań przy zachowaniu modelu programowania opartego na wątkach.
Pakiety i moduły
Klasy i interfejsy są grupowane w pakiety, które tworzą przestrzenie nazw. Pełna nazwa klasy obejmuje nazwę pakietu, np. java.util.ArrayList. Nazwy pakietów mogą mieć strukturę wieloczłonową, lecz nie tworzą hierarchii dziedziczenia. Przykładowo java.util i java.util.concurrent są z punktu widzenia języka odrębnymi pakietami.
Od Java 9 platforma wykorzystuje także Java Platform Module System. Moduł grupuje pakiety i może jawnie określać zależności od innych modułów oraz pakiety udostępniane na zewnątrz. Standardowa biblioteka Java została podzielona na moduły, z których podstawowym jest java.base.
Kompilacja i wykonywanie programów
Kod bajtowy i JVM
Kod źródłowy Javy jest zazwyczaj przechowywany w plikach z rozszerzeniem .java. Standardowy kompilator javac przekształca go w pliki klas .class zawierające instrukcje kodu bajtowego.