Est-il une JVM par application Java?
Est la même JVM utilisée par toutes les applications Java en cours d'exécution ou, est-ce que "l'une JVM pour Java application" appliquer? (dire que les applications sont IntelliJ IDEA, un serveur et NetBeans par exemple)
En outre, il n'existe aucune connexion entre les machines virtuelles affectées et les procédés utilisés par chaque application Java?
C'est une grande question. 🙂
OriginalL'auteur nadh | 2011-05-10
Vous devez vous connecter pour publier un commentaire.
En règle générale, chaque application aura son propre JVM de l'instance et de son propre niveau de l'OS du processus et chaque instance de la JVM est indépendants les uns des autres.
Il y a quelques détails de mise en œuvre tels que Classe De Partage De Données, où plusieurs JVM instances pourrait partager certaines données de la mémoire, mais ceux qui ont pas d'effet visible pour les applications (sauf pour l'amélioration du temps de démarrage, je l'espère).
Un scénario commun est cependant un seul serveur d'applications (ou "serveur web") comme Glassfish ou Tomcat de l'exécution de plusieurs applications web. Dans ce cas, plusieurs applications web peuvent partager une JVM.
OriginalL'auteur Joachim Sauer
Il y a une JVM pour Java application. Il ne devrait pas y avoir aucun lien entre eux, sauf si vous en établir un, par exemple, avec la mise en réseau. Si vous travaillez à l'intérieur d'un IDE, le code que vous écrivez généralement s'exécute dans une autre JVM. L'IDE se connecte généralement séparée de la JVM pour le débogage. Si vous avez affaire à plusieurs applications web, ils pourraient partager la même JVM si elles sont déployées sur le même conteneur web.
OriginalL'auteur WhiteFang34
Nombre de machines virtuelles en cours d'exécution est le nombre d'exécutables invoquée.
Chaque application invoque son propre fichier exécutable java (java.exe/javaw.exe etx pour windows) ce qui signifie que chacune est en cours d'exécution dans une autre JVM.
OriginalL'auteur d-live
En théorie, vous pouvez exécuter plusieurs applications dans une machine virtuelle java. Dans la pratique, ils peuvent interférer les uns avec les autres dans une variété de façons. Par exemple:
Refrence
OriginalL'auteur Rajneesh Mishra
Toute application qui a partagé les bibliothèques de partager la même copie de ces bibliothèques. Java a une bonne quantité de bibliothèques partagées. Cependant, vous ne remarquerez pas la différence, sauf pour la mémoire enregistré.
OriginalL'auteur Peter Lawrey
Réponse courte: souvent, oui, vous allez obtenir une demande par la JVM.
Réponse longue: la JVM peut être utilisé de cette façon, et c'est peut-être la meilleure option, mais il n'a pas à être.
Tout dépend de ce que vous considérez être une "application". Un IDE est un bon exemple d'une application qui est présenté à ses utilisateurs finaux (c'est à dire nous) comme une seule entité, mais qui est en fait composé de plusieurs applications sous-jacentes (compilateurs, les coureurs de l'épreuve, les outils d'analyse statique, les emballeurs, les gestionnaires de paquets, de projet /gestion de la dépendance des outils, etc). Dans ce cas, il existe une variété de trucs qui l'IDE utilise pour s'assurer que l'utilisateur est confronté à une expérience intégrée tout en étant protégé (dans une certaine mesure) de l'individu aléas de la sous-jacentes des outils. L'un de ces truc est de faire certains les choses dans une autre JVM, de communiquer via des fichiers texte ou par l'intermédiaire de l'application de débogage au niveau des installations.
Serveurs d'Application (Wildfly, Glassfish, Websphere, Weblogic, etc) sont des applications dont la raison d'être est d'agir en tant que conteneurs pour d'autres applications à exécuter dans. Dans ce cas, d'un point de vue, il y a une seule JVM par application (c'est à dire une JVM est utilisé pour exécuter l'ensemble de l'application serveur) mais il y a vraiment de multiples applications contenues dans JVM dans leur propre droit, chaque logiquement séparés les uns des autres dans leur propre classloader (réduction de la possibilité de l'accident dans-processus de la diaphonie).
Donc, tout dépend vraiment de ce que vous considérez qu'un
application
être. Si vous êtes purement parler de "la chose qui s'exécute lors du" main () "est appelée", alors vous êtes à la recherche d'une application par la JVM - lorsque le système d'exploitation démarre la JVM la JVM s'exécute une seule classepublic static void main()
méthode.Mais une fois que les applications commencent de plus en plus complexes de vos frontières deviennent plus floues. Un IDE tel que Intellij ou Eclipse va réutiliser une grande partie de la même étoffe que 'javac', soit dans la même JVM ou d'une autre, ainsi que de faire un travail différent (comme repeindre l'écran). Et les utilisateurs d'une application web (partagé JVM) de l'application serveur peut effectivement être à l'aide de beaucoup de le même "de base" de l'application, tel pourrait être utilisé localement via la ligne de commande.
OriginalL'auteur sisyphus
Peu de retard, mais ici, cette info peut être utile pour quelqu'un. Dans un système Linux, si vous voulez savoir combien de machines virtuelles sont en cours d'exécution, vous pouvez essayer cette commande
OriginalL'auteur Ram Dwivedi