que programacion machine implicaciones error descargar java process jvm

programacion - ¿Hay una JVM por aplicación Java?



que es jvm en programacion (6)

¿Es la misma JVM utilizada por todas las aplicaciones Java que se ejecutan o se aplica ''una JVM por aplicación Java''? (dicen que las aplicaciones son IntelliJ IDEA, un servidor y NetBeans, por ejemplo)

Además, ¿hay alguna conexión entre las JVM asignadas y los procesos utilizados por cada aplicación Java?


Cualquier aplicación que tenga bibliotecas compartidas compartirá la misma copia de esas bibliotecas. Java tiene una buena cantidad de bibliotecas compartidas. Sin embargo, no notará la diferencia a excepción de alguna memoria guardada.


El número de JVM en ejecución es el número de ejecutables invocados. Cada aplicación invoca su propio ejecutable Java (java.exe / javaw.exe etx para Windows) lo que significa que cada uno se ejecuta en una JVM separada.


Hay una JVM por aplicación Java. No debería haber ninguna conexión entre ellos a menos que establezca uno, por ejemplo, con una red. Si está trabajando dentro de un IDE, el código que escribe generalmente se ejecuta en una JVM por separado. El IDE generalmente conectará la JVM separada para la depuración. Si se trata de múltiples aplicaciones web, podrían compartir la misma JVM si se implementan en el mismo contenedor web.


En términos generales, cada aplicación obtendrá su propia instancia de JVM y su propio proceso de nivel de sistema operativo y cada instancia de JVM es independiente entre sí.

Hay algunos detalles de implementación, como el intercambio de datos de clase , donde varias instancias de JVM pueden compartir algunos datos / memoria, pero esos no tienen efecto visible para el usuario para las aplicaciones (con la excepción del tiempo de inicio mejorado, con suerte).

Sin embargo, un escenario común es un único servidor de aplicaciones (o "servidor web") como Glassfish o Tomcat que ejecutan varias aplicaciones web. En este caso, varias aplicaciones web pueden compartir una JVM.


Poco tarde aquí, sin embargo, esta información puede ser útil para alguien. En un sistema Linux, si desea saber cuántas JVM se están ejecutando, primero puede verificar cuántos procesos Java se están ejecutando con ps -ef|grep java y verificar sus JVM con el comando jps . Verás que para cada ID de proceso Java, tienes un hilo como salida de jps .


En teoría, puede ejecutar múltiples aplicaciones en una JVM. En la práctica, pueden interferir entre sí de varias maneras. Por ejemplo:

The JVM has one set of System.in/out/err, one default encoding, one default locale, one set of system properties, and so on. If one application changes these, it affects all applications. Any application that calls System.exit() kills all applications. If one application thread goes wild, and consumes too much CPU or memory it will affect the other applications too.

Refrencia