Krótka odpowiedź: często tak, otrzymasz jedną aplikację na JVM. Długa odpowiedź: w ten sposób można wykorzystać maszynę JVM i to może być najlepsza opcja, ale nie musi.
Wszystko zależy od tego, co uznasz za „wniosek”. IDE jest dobrym przykładem aplikacji, która jest prezentowana użytkownikom końcowym (tj. Nam) jako pojedyncza jednostka, ale w rzeczywistości składa się z wielu aplikacji bazowych (kompilatory, programy uruchamiające testy, narzędzia do analizy statycznej, programy do pakowania, menedżery pakietów, projekty / narzędzia do zarządzania zależnościami itp.). W takim przypadku istnieje wiele sztuczek, których IDE używa, aby zapewnić, że użytkownik doświadczy zintegrowanego doświadczenia, będąc jednocześnie chronionym (do pewnego stopnia) przed indywidualnymi kaprysami podstawowych narzędzi. Jedną z takich sztuczek jest zrobienie pewnych rzeczy w oddzielnej JVM, komunikując się za pośrednictwem plików tekstowych lub narzędzi do debugowania na poziomie aplikacji.
Serwery aplikacji (Wildfly, Glassfish, Websphere, Weblogic itp.) To aplikacje, których racją bytu jest działanie jako kontenery do uruchamiania innych aplikacji. W takim przypadku z jednej perspektywy na aplikację przypada jedna maszyna JVM (tj. Jedna maszyna JVM jest używany do uruchamiania całego serwera aplikacji), ale w rzeczywistości w tej maszynie JVM znajduje się wiele aplikacji, z których każda jest logicznie oddzielona od siebie we własnym module ładującym klasy (co zmniejsza możliwość przypadkowego przesłuchu w procesie).
Tak więc wszystko naprawdę zależy od tego, co uważasz za application
. Jeśli mówisz wyłącznie o „rzeczy, która działa, gdy wywoływana jest funkcja 'main ()'”, to patrzysz na jedną aplikację na JVM - gdy system operacyjny uruchamia JVM, JVM uruchamia public static void main()
metodę pojedynczej klasy .
Ale gdy aplikacje zaczną się bardziej skomplikować, granice stają się bardziej rozmyte. IDE, takie jak Intellij lub Eclipse, będzie ponownie wykorzystywać wiele tych samych rzeczy, co „javac”, w tej samej lub innej JVM, a także wykonywać inne prace (np. Malowanie ekranu). Użytkownicy aplikacji internetowej na (współdzielonym JVM) serwerze aplikacji mogą w rzeczywistości używać tej samej „podstawowej” aplikacji, która mogłaby być używana lokalnie za pośrednictwem wiersza poleceń.