Respuesta corta: a menudo, sí, obtendrá una aplicación por JVM. Respuesta larga: la JVM se puede usar de esa manera, y esa puede ser la mejor opción, pero no tiene por qué serlo.
Todo depende de lo que consideres una 'aplicación'. Un IDE es un buen ejemplo de una aplicación que se presenta a sus usuarios finales (es decir, nosotros) como una sola entidad, pero que en realidad está compuesta por múltiples aplicaciones subyacentes (compiladores, ejecutores de prueba, herramientas de análisis estático, empaquetadores, administradores de paquetes, proyectos / herramientas de gestión de dependencias, etc.). En ese caso, hay una variedad de trucos que el IDE utiliza para garantizar que el usuario experimente una experiencia integrada y al mismo tiempo esté protegido (hasta cierto punto) de los caprichos individuales de las herramientas subyacentes. Uno de esos trucos es hacer algunas cosas en una JVM separada, comunicándose a través de archivos de texto o mediante las funciones de depuración a nivel de la aplicación.
Los servidores de aplicaciones (Wildfly, Glassfish, Websphere, Weblogic, etc.) son aplicaciones cuya razón de ser es actuar como contenedores para que se ejecuten otras aplicaciones. En ese caso, desde una perspectiva, hay una sola JVM por aplicación (es decir, una JVM se utiliza para ejecutar todo el servidor de aplicaciones), pero en realidad hay varias aplicaciones contenidas dentro de esa JVM por derecho propio, cada una separada lógicamente entre sí en su propio cargador de clases (lo que reduce la posibilidad de diafonía accidental en el proceso).
Entonces, todo depende realmente de lo que consideres application
que es. Si está hablando puramente de "lo que se ejecuta cuando se llama a 'main ()'", entonces está viendo una aplicación por JVM; cuando el sistema operativo inicia la JVM, la JVM ejecuta el public static void main()
método de una sola clase .
Pero una vez que sus aplicaciones comienzan a complicarse, sus límites se vuelven más borrosos. Un IDE como Intellij o Eclipse reutilizará gran parte del mismo material que 'javac', ya sea en la misma JVM o en una diferente, además de realizar un trabajo diferente (como volver a pintar la pantalla). Y los usuarios de una aplicación web en un servidor de aplicaciones (JVM compartido) pueden estar usando la misma aplicación 'central' que podría usarse localmente a través de la línea de comandos.