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 que ser así.
Todo depende de lo que usted considere una 'aplicación'. Un IDE es un buen ejemplo de una aplicación que se presenta a sus usuarios finales (es decir, a nosotros) como una única entidad, pero que en realidad está compuesta por múltiples aplicaciones subyacentes (compiladores, corredores de prueba, herramientas de análisis estático, empaquetadores, gestores de paquetes, proyectos/herramientas de gestión de dependencia, etc.). En ese caso, hay una variedad de trucos que utiliza el IDE para garantizar que el usuario experimente una experiencia integrada mientras que también está protegido (en cierta medida) de los caprichos individuales de las herramientas subyacentes.Uno de estos trucos es hacer algunas cosas en una JVM separada, comunicándose a través de archivos de texto oa través de las instalaciones de depuración a nivel de aplicación.
Los servidores de aplicaciones (Wildfly, Glassfish, Websphere, Weblogic, etc.) son aplicaciones cuya razón de ser es actuar como contenedores para que otras aplicaciones se ejecuten. En ese caso, desde una perspectiva, hay una sola JVM por aplicación (es decir, una JVM se usa para ejecutar todo el servidor de aplicaciones), pero en realidad hay varias aplicaciones contenidas dentro de esa JVM por sí mismas, cada una separada lógicamente entre sí en su propio cargador de clases (reduciendo la posibilidad de una diafonía accidental en el proceso).
Por lo tanto, todo depende de lo que considere un application
. Si solo está hablando de "lo que se ejecuta cuando se llama a 'main()', entonces está buscando una aplicación por JVM: cuando el SO inicia la JVM, la JVM ejecuta el método de una sola clase public static void main()
.
Pero una vez que sus aplicaciones se vuelven más complicadas, sus límites se vuelven más borrosos. Un IDE como Intellij o Eclipse reutilizará muchas de las mismas cosas que 'javac', ya sea en la misma JVM o en una diferente, y también haciendo diferentes trabajos (como volver a pintar la pantalla). Y los usuarios de una aplicación web en un servidor de aplicaciones (JVM compartido) pueden estar usando prácticamente la misma aplicación 'core' que podría usarse localmente a través de la línea de comando.