2010-09-06 20 views
8

La invocación de java a través de dos líneas de comando diferentes implica dos JVM diferentes o dos instancias separadas de la misma JVM.Instancias de JVM

+3

¿Sabía que ambas respuestas son equivalentes? – Riduidel

+0

Debe ser más específico. ¿Cuál es la diferencia de JVM para ti y qué es lo mismo? ¿Qué diferencia estás pidiendo? – splash

Respuesta

21

JVM es Java Virtual Machine, un espacio de memoria donde las clases (código) se cargan y los objetos (datos) se comparten. JVM es equivalente a un proceso del sistema operativo.

Al escribir java... en su línea de comandos, está ejecutando un proceso independiente que carga clases Java en la memoria, las clases base de Java y las suyas (de los archivos .class o .jar que indique).

Otro comando java... cargará un proceso diferente con su propia memoria y cargará clases por sí mismo.

Confusión de palabra de instancia: cuando dices 'dos ​​instancias de la misma JVM'. Es habitual decir instancia de una JVM en un proceso separado, es decir, en una JVM independiente cargada. Si está diciendo: dos procesos están ejecutando JVM 1.5, OK, es la misma JVM en el sentido de que es la misma versión pero son procesos diferentes, diferentes 'instancias', independientes en todo sentido.

Webapp confusion: Una aplicación web (por ejemplo) es simplemente un conjunto de clases y objetos instanciados, que atienden algunas URL en un servidor web. Puede iniciar Tomcat con 10 aplicaciones diferentes, es decir, 10 grupos diferentes de clases y objetos, cada uno de ellos atendiendo solicitudes diferentes, pero de hecho comparten el mismo espacio de memoria (proceso de SO). Una aplicación web no puede tocar los objetos de otras aplicaciones web porque nadie le da una referencia a los otros objetos (y las clases están ocultas de alguna manera, pero esa es otra historia llamada: carga de clases).

1

¿Cuál es la diferencia en su pregunta? Diría: dos instancias de JVM diferentes. :)

Cada ejecución del comando java invoca una nueva instancia de JVM. La aplicación java en ejecución podría ejecutar nuevos subprocesos de Java (como un Tomcat lo hace con aplicaciones web).

+0

¿quieres decir que ambas son JVM diferentes? – JavaUser

+0

Sí en el sentido de diferentes procesos. – splash

+0

¿Cómo puedo sentir esto? ¿Tiene algún código o concepto para darse cuenta de esto? – JavaUser

1

Dos JVM separadas. Puedes ejecutar muchas cosas dentro de la misma JVM (digamos 10 webapps servidas por la misma instancia de Tomcat), pero solo hay 1 comando java para iniciar tomcat.

+0

entonces ¿Por qué dices dos JVM diferentes? – JavaUser

+0

Porque 2 comandos java darán lugar a 2 instancias de la JVM. Si, en cambio, acaba de ejecutar Tomcat una vez y desplegar 10 guerras en él ... solo hay 1 instancia de JVM ejecutándose – bwawok

1

Si inició el java.exe de Sun desde su versión JDK/JRE 1.6 desde la misma ruta de origen dos veces, obtendría dos instancias de JVM separadas y distintas. No habría intercambio entre ellos a menos que lo haya configurado a través de sus aplicaciones. Si quería ejecutar dos JVM diferentes, tendría que iniciar un java.exe de un tipo (digamos 1.5) desde una ubicación y un java.exe (versión 1.6) desde otro.