7
votes

Combien de jvm nous pouvons avoir dans une machine?

J'ai une classe qui gère Infinit (ne rien faire, juste boucle et dormir), appelé Neverreturn. J'essaie de l'exécuter en utilisant la commande suivante dans Windows XP 32bit:

Java -XMS1200M Neverreturn

Je trouve avec la commande, je ne peux créer que 4 instance Java en même temps. La 5ème et la prochaine commande Java ne permettront pas de créer JVM.

Si je change la commande à -xms600m, je peux créer 8 instance Java. Le 9ème échouera.

Quelqu'un pourrait-il expliquer cela? J'utilise Sun JDK1.6 Mise à jour 23 et JDK1.5 Mise à jour 22.


3 commentaires

Les «S» dans -XMS Forcent le JavRY à allouer au moins autant de mémoire. Peut-être que vous pensais à '-xmx', avec un «X», qui allouera au plus autant de mémoire. Si votre machine a 6 Go, ce que vous voyez est totalement normal que vous avez utilisé '-XMS'.


La version de 32 bits XP ne peut gérer que 4 Go - et Afaik, il n'y a que 3 Go disponible dans ce cas.


Je comprends la différence entre les -xms et -xmx. Ma question est que le système d'exploitation a la capacité de donner à chaque processus de mémoire de 2 Go sur le système Windows 32bit. Mais pourquoi il y a encore une certaine limitation croix ces processus JVM.


3 Réponses :


5
votes

Si vous avez quatre instances de la JVM chacune à l'aide de 1200 m de mémoire, cela vous donne 4800 m de mémoire allouée.

Si vous avez huit instances de la JVM à l'aide de la mémoire jusqu'à 600 m de mémoire, cela vous donne également 4800 m de mémoire.

Si je devais deviner, on dirait que le problème est que vous essayez de promettre de plus de mémoire aux instances JVM que sur votre système. La chute de la quantité de mémoire que vous promettez doit avoir une augmentation correspondante du nombre d'instances que vous pouvez exécuter.


2 commentaires

+1. Oui, le JDK vérifie s'il y a suffisamment de mémoire pour garantir les paramètres -XMS (et autres liés).


Le JVM allège un bloc de mémoire continu au démarrage. Il échouera s'il n'y a plus de mémoire + échange à gauche.



0
votes

Pour chaque instance de la machine virtuelle lancée de cette manière, 600 Mo de mémoire est dédiée à celle-ci, ce qui signifie que si vous n'aviez que 1 Go de mémoire, vous ne pouviez que lancer avec succès une instance de JVM si vous autorisez chaque instance à consommer. 600 Mo de mémoire. Selon les sons, vous aviez environ 4,6 Go de mémoire libre au moment de la course 8 d'instances de 600 Mo chacune.


0 commentaires

2
votes

réponse simple: Autant de JVM que vous voulez; Bien sûr tant que votre machine peut fournir les ressources nécessaires (mémoire de lecture).

Si vous vouliez demander combien de JDK / JRES vous pouvez utiliser dans une machine (différentes versions JDK / JRE); La réponse est "Il n'y a pas de contrainte".

Vous pouvez également avoir beaucoup de JDK, je ne suis pas sûr des installateurs Windows. Vous pouvez toujours choisir d'utiliser une décharge à la place.

J'espère que cela aide.


1 commentaires

Cependant, la vérité que je vois est qu'il y a une certaine limitation à la mémoire totale de nombreuses instances JVM. Mais cette limitation n'existe pas sur un autre processus.