2012-09-20 17 views
8

Al leer esto article, sé que cada aplicación java se ejecutará en una instancia específica de máquina virtual Java. Entonces, si ejecuto los siguientes comandos ("Java -jar test1.jar", "Java -jar test2.jar", obtendré dos procesos en el sistema. Y si cada comando usó el tamaño de almacenamiento dinámico predeterminado, por ejemplo, 256M. el costo total de la memoria es de 512 Mb, es cierto también tengo otras preguntas: ¿?lo que hará la máquina virtual Java al ejecutar múltiples aplicaciones java

  • es la máquina virtual de Java un servicio, en la puesta en marcha con el sistema
  • Cuando ejecuto "test1 java-jar .jar ", creará una instancia de Java Virtual Machine, luego ejecutará la función principal. ¿Significa que cada aplicación Java en ejecución es un subproceso o subproceso de Java Virtual Machine?
  • Cada aplicación Java en ejecución es individual, otra aplicación ation no puede obtener variables, métodos, constantes, etc. de esta aplicación java en ejecución?
  • Si una aplicación java en ejecución se cuelga, ¿afectará a otra aplicación java en ejecución?

PD: Busqué en Google y obtuve muchas respuestas diferentes, estaba totalmente confundido. Cualquiera que pueda ayudarme en este tipo de preguntas o incluso más profundidad de la máquina virtual Java. Por ejemplo, cómo funciona.

Respuesta

7

La JVM es un proceso estándar, al igual que cualquier otra. Como tal, no hay comunicación implícita o estado compartido entre los dos. Cada uno tendrá su propio montón, hilos, etc. Si matas uno, no afectará al otro.

Lo se compartirán las páginas de códigos de la propia JVM. El kernel es lo suficientemente inteligente como para identificar el mismo binario (cualquier binario, no solo la JVM) que se ejecuta dos veces y reutilizar la imagen. Esto solo se aplica al código binario real, no a su estado. Consulte here para obtener más información. Linux.

La JVM no es un proceso de daemon, pero podría iniciarse al iniciarse el sistema como un servicio de Windows o un proceso de Unix/Linux (mediante las secuencias de comandos /etc/init.d). Así es como diría (ejecute) un servicio web escrito en Java cuando se inicia una máquina.

+1

Para no contradecir, pero para aclarar; la reutilización de páginas de memoria de código (binario) es una característica del sistema operativo, no de Java. – SJuan76

+0

@ SJuan76 - Acabo de añadir una aclaración. Thx –

+0

@BrianAgnew Aquí mi otra pregunta, hasta donde yo sé, cada aplicación Java en ejecución es individual y cada uno de ellos tiene su propio uso de memoria. ¿Pero cómo gestiona el tamaño del montón mediante las opciones "-Xms y -Xmx"? Este es uno de los modelos de memoria de JVM (http://www.ibm.com/developerworks/aix/library/au-JavaPart2.html), lo he leído pero me siento confuso. – bannie

2

1) No, pero hay formas de lanzar aplicaciones Java como servicios con contenedores (Google para "servicio Java").

2) Sí.

3) Puede usar la comunicación entre procesos (por ejemplo, HTTP). Pero no hay accesos directos debido a que todos los procesos se ejecutan en JVM.

4) No se

0

For the OS, JVM like an user application. Each JVM Instance is individual.

  1. Nº JVM es un proceso normal como others.But se puede ejecutar como un proceso demonio.
  2. Sí. La aplicación Java se ejecuta en JVM al igual que su aplicación en el sistema operativo.
  3. Sí. Cada subproceso de JVM es individual, pero pueden comunicarse con otras JVM a través de la red, RMI ...
  4. Depende. Normalmente son individuales, pero si se produce un bloqueo JVM cause the OS crash, se realizarán otras JVM.
Cuestiones relacionadas