2011-01-13 31 views
7

Tengo una clase que se ejecuta infinito (no hacer nada, solo bucle y dormir), llamado NeverReturn. Trato de ejecutarlo usando los siguientes comandos en Windows de 32 bits XP:¿Cuántas JVM podemos tener en una sola máquina?

java -Xms1200M NeverReturn

encuentro con el comando puedo crear sólo el 4 instancia de Java al mismo tiempo. El 5 ° y el próximo comando java no podrán crear jvm.

Si cambio el comando a -Xms600M, puedo crear 8 instancias de Java. El noveno fracasará.

¿Alguien podría explicar eso? Estoy usando la actualización sun jdk1.6 23 y la actualización jdk1.5 22.

+3

la 's' en -Xms obliga a la JVM a asignar ** al menos ** esa cantidad de memoria. Tal vez estabas pensando en '-Xmx', con una 'x', que asignará ** como mucho ** esa cantidad de memoria. Si su máquina tiene 6 GB, entonces lo que está viendo es totalmente normal, ya que usó '-Xms'. – Gugussee

+0

La versión XP de 32 bits solo puede manejar 4 GB, y afaik, en ese caso solo hay alrededor de 3GB disponibles. – tigger

+1

Entiendo la diferencia entre -Xms y -Xmx. Mi pregunta es si el sistema operativo tiene la capacidad de dar a cada proceso alrededor de 2 GB de memoria en el sistema de Windows de 32 bits. Pero por qué todavía hay algunas limitaciones cruzan este proceso de jvm. – xeranic

Respuesta

5

Si tiene cuatro instancias de la JVM cada una usando 1200M de memoria, eso le da 4800M de memoria asignada.

Si tiene ocho instancias de JVM que utilizan cada una hasta 600M de memoria, eso le proporciona 4800M de memoria también.

Si tuviera que adivinar, parece que el problema es que está intentando prometer más memoria a las instancias de JVM que las que existen en su sistema. Dejar caer la cantidad de memoria que promete debería tener un aumento correspondiente en la cantidad de instancias que puede ejecutar.

+0

+1. Sí, el JDK verifica si hay suficiente memoria para garantizar la configuración de -Xms (y otros relacionados). – Thilo

+2

La JVM asigna un bloque continuo de memoria al inicio. Fallará si no queda más memoria + intercambio. –

0

Para cada instancia de la máquina virtual iniciada de esta manera, 600 MB de memoria están dedicados a ella, lo que significa que si solo tuviera 1 GB de memoria, solo podría ejecutar correctamente una instancia de JVM si permitiera que cada instancia consume 600 MB de memoria. Por lo que se dice, tenía aproximadamente 4,6 GB de memoria libre en el momento de ejecutar 8 instancias de 600 MB cada una.

2

Respuesta simple: tantas JVM como desee; por supuesto, siempre y cuando su máquina pueda proporcionar los recursos necesarios (leer memoria).

Si desea preguntar cuántos JDK/JRE puede usar en una máquina (diferentes versiones de JDK/JRE); la respuesta es "no hay restricción".

Así que puedes tener muchos JDK también, aunque no estoy seguro de los instaladores de Windows. Siempre puedes elegir usar un volcado.

Espero que esto ayude.

+0

Sin embargo, la verdad que veo es que hay algunas limitaciones en la memoria total de muchas instancias de jvm. Pero esa limitación no existe en otro proceso. – xeranic

Cuestiones relacionadas