8
votes

Quelle machine virtuelle Java fera tout en exécutant plusieurs applications Java

En lisant ce article , je sais que chaque application Java s'exécutera une instance de machine virtuelle Java spécifique. Donc, si j'exécute les commandes suivantes ("Java -Jar Test1.jar", "Java -Jar Test2.jar", je recevrai deux processus dans le système. Et si chaque commande a utilisé la taille du tas par défaut, par exemple 256 m. Le coût total de la mémoire est de 512m, est-ce correct? Aussi j'ai d'autres questions:

  • est la machine virtuelle Java un processus de démon, démarrez-le avec le système?
  • Quand j'exécute "Java -Jar Test1.jar", il créera une instance de machine virtuelle Java, puis exécute la fonction principale. Cela signifie-t-il que chaque application Java exécutée est un sous-thread ou un processus de machine virtuelle Java?
  • est chacun en cours d'exécution individuelle d'application Java, une autre application ne peut pas être variable, méthode, constante, etc., de cette application Java exécutée?
  • Si on exécute une application Java est écrasé, cela affectera-t-il une autre application Java en cours d'exécution?

    PS: J'ai googlé et j'ai beaucoup de réponses différentes, j'ai été totalement confuse. Quiconque peut m'aider sur ce genre de questions ou encore plus de profondeur de la machine virtuelle Java. Par exemple, comment ça marche.


0 commentaires

3 Réponses :


2
votes

1) Non, mais il existe une manière de lancer des applications Java en tant que services avec des wrappers (Google pour "Service Java").

2) oui.

3) Vous pouvez utiliser la communication entre les processus (v.g. http). Mais il n'y a pas de raccourcis du fait que tous les processus sont gérés dans JVM.

4) non


0 commentaires

7
votes

Le JVM est un processus standard, tout comme n'importe quel autre. En tant que tel, il n'y a pas de communication implicite ni de partage d'État entre les deux. Chacun aura son propre tas, des fils, etc. Si vous en tuez un, cela n'affectera pas l'autre.

Qu'est-ce que sera partagé les pages de code de la JVM elle-même. Le noyau est suffisamment intelligent pour identifier le même binaire ( tout binaire - non seulement le JVM) fonctionnant deux fois et réutiliser l'image. Ceci s'applique uniquement au code binaire actuel - pas son état. Voir ici pour plus d'informations re. Linux.

Le JVM n'est pas un processus de démon, mais pourrait être démarré sur le démarrage du système sous forme de processus Windows Service ou Unix / Linux (via /etc/init.d scripts). Voici comment vous (disons) exécuter un service Web écrit en Java lorsqu'une machine est démarrée.


3 commentaires

Ne pas contredire mais clarifier; La réutilisation des pages de mémoire de code (binaire) est une fonction OS, pas une java.


@ Sjuan76 - Il suffit d'ajouter une clarification. THX


@BrianAnwew ici ma dernière question, autant que je sache, chaque application Java est individuelle et chacune d'entre elles a sa propre utilisation de la mémoire. Mais comment il gère la taille du tas via les options "-XMS et -XMX"? Ceci est l'un des modèles de mémoire JVM ( iBM.com/Developerworks/aix/ Bibliothèque / au-Javapart2.html ), j'ai lu mais je me sens déroutant.



0
votes

pour le système d'exploitation, JVM comme une application utilisateur. Chaque instance JVM est individuelle.

  1. non. JVM est un processus normal comme d'autres. Mais vous pouvez l'exécuter en tant que processus DEAMON.
  2. oui. Application Java Exécutez sur JVM, tout comme vous Application sur OS.
  3. oui. Chaque fil JVM est individuel, mais ils peuvent communiquer avec d'autres JVMS via le réseau, RMI ...
  4. Cela dépend. Normalement, ils sont individuels, mais si un crash JVM cause le crash de système d'exploitation , d'autres JVM seront effectués.

0 commentaires