paneles - table swing java
Cuando se ejecutan varios programas Java en la misma máquina (2)
1) Si tengo un servicio web escrito en Java, necesitará una instancia de JVM para ejecutar. Entonces, ¿puede JVM convertirse en un proceso demoníaco?
Sí puede. Cómo se hace depende del O / S y del contenedor del servidor web.
2) En caso afirmativo, cuando ejecutemos cualquier otra aplicación Java, ¿usará esta instancia de JVM o creará una nueva?
No. Cada aplicación Java usa una JVM independiente.
Cada JVM es un proceso separado, lo que significa que no se comparten pilas, montones, etcétera. (En general, lo único que se puede compartir son los segmentos de solo lectura que contienen el código de la JVM principal y las bibliotecas nativas ... de la misma manera que los procesos normales pueden compartir segmentos de código).
3) La memoria principal disponible en cualquier máquina es constante. Cuando iniciamos n procesos Java simultáneamente sin proporcionar ningún tamaño de pila inicial, ¿cómo se distribuye el tamaño del almacenamiento dinámico entre los procesos?
El mecanismo para decidir qué tamaño debe tener el montón si no especifica un tamaño depende de la JVM / plataforma / versión que esté utilizando, y de si usa el modelo "cliente" o "servidor" (para JVM de Hotspot). La heurística no tiene en cuenta el número o tamaño de otras JVM.
Referencia: https://stackoverflow.com/a/4667635/139985
En la práctica, probablemente sea mejor que especifique el tamaño del montón directamente.
4) ¿Hay algún proceso que administre n cantidad de instancias de JVM o es administrado por el sistema operativo?
Ninguno. El número de instancias JVM está determinado por las acciones de varias cosas que pueden iniciar procesos; por ejemplo, scripts de daemons, scripts de comandos, usuarios escribiendo comandos en la línea de comandos, etcétera. En última instancia, el sistema operativo puede negarse a iniciar más procesos si se quedan sin recursos, pero las JVM no se tratan de manera diferente a otros procesos.
5) Cuando stop-the-world ocurre durante un GC, ¿están afectadas otras instancias de JVM (diferentes hilos, supongo)?
No. Las JVM son procesos independientes. No comparten ningún estado mutable. La recolección de basura funciona en cada JVM de forma independiente.
Cada aplicación java se ejecutará en una instancia de máquina virtual Java específica. Realmente me estoy confundiendo en aspectos a continuación y Google me ha confundido aún más. Diferentes artículos en diferentes sitios.
Si tengo un servicio web escrito en java, se necesitará una instancia de JVM para ejecutarlo. Así, ¿puede JVM convertirse en un proceso de daemon?
En caso afirmativo, cuando ejecutemos cualquier otra aplicación Java, ¿usará esta instancia de JVM o creará una nueva?
La memoria principal disponible en cualquier máquina es constante. Cuando iniciamos n procesos Java simultáneamente sin proporcionar ningún tamaño de pila inicial, ¿cómo se distribuye el tamaño del almacenamiento dinámico entre los procesos?
¿Hay algún proceso que administre n cantidad de instancias de JVM o es administrado por el sistema operativo en sí?
Cuando stop-the-world sucede durante un GC, ¿están afectadas otras instancias de JVM (diferentes hilos, supongo)?
- ver cómo demonizar un programa Java?
- Se creará una nueva instancia de JVM
- de la misma manera que la memoria se comparte entre todos los demás procesos
- es administrado por O / S
- otras instancias no se ven afectadas
Si sus instancias tienen que coordinar su trabajo, puede crear una única instancia principal que pueda ejecutar / detener otras instancias.
No explicó por qué necesita varias instancias de JVM. Probablemente, la instancia única funcionaría mejor.