Коротка відповідь: часто так, ви отримуєте по одній програмі на JVM. Довга відповідь: JVM можна використовувати таким чином, і це може бути найкращим варіантом, але це не обов’язково.
Все залежить від того, що ви вважаєте «заявкою». IDE є хорошим прикладом програми, яка представлена кінцевим користувачам (тобто нам) як єдине ціле, але яка насправді складається з декількох базових програм (компілятори, тестові програми, засоби статичного аналізу, пакувальники, менеджери пакетів, проект / інструменти управління залежностями тощо). У цьому випадку існує безліч прийомів, які IDE використовує для того, щоб забезпечити користувачеві інтегрований досвід, одночасно захистившись (до певної міри) від окремих примх основних інструментів. Одним з таких трюків є зробити щось в окремій JVM, спілкуючись або за допомогою текстових файлів, або за допомогою засобів налагодження на рівні програми.
Сервери додатків (Wildfly, Glassfish, Websphere, Weblogic та ін.) - це програми, метою яких є виступати контейнерами для запуску інших програм. У такому випадку, з одного погляду, існує одна JVM для кожного додатка (тобто одна JVM використовується для запуску всього сервера додатків), але насправді в цій JVM є кілька додатків, які логічно відокремлені один від одного у своєму власному завантажувачі класів (зменшуючи можливість випадкових перехресних переговорів у процесі).
Отже, все насправді залежить від того, чим ви вважаєте application
. Якщо ви просто говорите про "те, що працює, коли викликається 'main ()'", тоді ви розглядаєте одне додаток для JVM - коли ОС запускає JVM, JVM запускає public static void main()
метод одного класу .
Але як тільки ваші програми починають ускладнюватися, ваші межі стають більш розмитими. IDE, такий як Intellij або Eclipse, буде використовувати повторно більшу частину того ж матеріалу, що й `` javac '', або в тій самій JVM, або в іншій, а також виконувати різні роботи (наприклад, перефарбовувати екран). А користувачі веб-додатків на (спільному JVM) сервері додатків насправді можуть використовувати майже ту саму «основну» програму, яку можна було використовувати локально через командний рядок.