Perm espace vs espace de Tas
D'abord, Quelle est la différence entre Perm de l'espace et de la mémoire (en Quoi et comment la JVM choisir d'utiliser chaque espace de mémoire)?
Deuxième, mais le plus important, ce genre de ratio serait recommandé pour une norme MVC type d'applications java?
Vous devez vous connecter pour publier un commentaire.
La tas stocke l'ensemble des objets créés par votre programme Java. Le tas de contenu est contrôlé par le garbage collector, ce qui libère de la mémoire dans le tas lorsque vous arrêtez d'utiliser un objet (c'est à dire quand il n'y a pas plus de références à l'objet.
Ceci est en contraste avec la pile, qui stocke les types primitifs comme les entiers et les caractères, et sont généralement variables locales et des valeurs de retour de fonction. Ce ne sont pas des ordures.
La perm espace se réfère à une partie spéciale de la tas. Voir ce AFIN de répondre à une explication:
Qu'est-ce que perm espace?
-XX:MaxPermSize=256m
à l'ensemble de la région de perm taille de l'espace à 256 mo.Personnellement, je ne considère pas la PermGen une partie spéciale de la tas.
Je préfèrerais faire penser à des tas comme une zone de mémoire dédié pour stocker des instances de l'objet tandis que la PermGen comme un espace dédié pour stocker les définitions de classe. En conséquence, un tas de cycle de vie est liée à une application lors de la PermGen du cycle de vie est liée à une JVM.
L'un des meilleurs exemples d'une application et sa JVM peut avoir différentes du cycle de vie est dans un conteneur Java EE. Dans un serveur d'application, les applications peuvent être déployées et non déployée sans redémarrer le serveur. Au cours de la undeployment (ou de réinsertion), il est facile de libérer toutes les instances de l'objet c'est à dire de la mémoire, mais c'est plutôt difficile à effacer toutes les classes chargées par cette app de PermGen parce que certaines classes peuvent encore être référencé par la JVM.
L'un de ces cas est le La Fuite Des Pilotes. Lorsqu'une application est déployée, un pilote JDBC est chargé et enregistré avec le DriverManager. Lorsque cette application est déployé, le DriverManager vies et tient une référence pour le conducteur, sa classe d'origine chargeur, et tout ce chargeur de classe chargé. En conséquence, une fuite de mémoire dans PermGen est créé, mais c'est pas la faute de l'application de gestion de la mémoire.
Il est vrai que les machines virtuelles comme JRocket n'ont pas PermGen à tous, tout est stocké en tas. C'est seulement dans ce contexte, pouvez-vous appeler PermGen une "partie spéciale" des tas. Même alors, nous devrions encore vue PermGen et tas différemment, car ils ont très différents et ils ont de très différents types de fuites de mémoire.
Mise à jour: Dans Oracle JDK 8, PermGen est remplacé par "Metaspace" et il est maintenant officiellement partie du tas. Nous n'avons pas besoin d'ajuster précisément PermGen plus.
Vous ne pouvez PAS donner des noms à la mémoire allouée dans le tas.
Qui signifie int
x
(son nom) est alloué dans la pile. Vous pouvez atteindre le pointeur de par son nom, de sorte que le pointeur se trouve dans la pile. Vous ne pouvez pas atteindre l'objet par son nom, parce qu'il n'a pas de nom. Accès à l' (sans nom) de l'objet doit être par son pointeur.