Quel est le but de la Java Constante Piscine?
Je suis en train d'essayer de creuser plus profondément dans la spécification de la Machine Virtuelle Java. J'ai lu À l'intérieur de la JVM réserver en ligne et il y a une confusion abstraction je n'arrive pas à comprendre: Constante de la Piscine. voici l'extrait du livre:
Pour chaque type de charge, une machine virtuelle Java doit stocker une constante de la piscine. Une constante de la piscine est un ensemble ordonné de les constantes utilisées par le type, y compris les littéraux (string, integer, point flottant et constantes) et les références symboliques à des types, des champs et des méthodes. Les entrées dans le constant pool sont référencés par index, tout comme les éléments d'un tableau. Parce qu'il détient des références symboliques à tous les types, des champs et des méthodes utilisées par un type, la constante de la piscine joue un rôle central dans la relation dynamique de programmes Java
J'ai plusieurs questions à propos de l'au-dessus et en CP en général:
- CP est situé dans
.class
fichier pour chaque type? - Que l'auteur entend par "référence symbolique"?
- Qu'est-ce que la Constante de la Piscine de l'objet, dans un anglais simple?
Vous devez vous connecter pour publier un commentaire.
Je pense que la compréhension de la façon dont le cadre est construit à l'aide d'un diagramme à l'aide.
Le cadre est où les opérandes (les instructions de fonctionnement) résident et c'est là que la liaison dynamique se produit. C'est une manière de sténographie, pour ainsi dire, à l'aide de la constante de la piscine pour garder une trace de la classe et de ses membres.
Chaque image contient une référence à la constante d'exécution de la piscine. Les points de référence à la constante de la piscine pour la classe de la méthode exécutée pour cette image. Cette référence permet à l'appui de la liaison dynamique.
Code C/C++ est généralement compilé en un fichier objet de multiples fichiers objets sont liés à un produit utilisable artefact comme un exécutable ou une dll. Lors de la liaison de la phase de références symboliques dans chaque fichier de l'objet sont remplacées par une adresse de mémoire par rapport à l'exécutable final. En Java ce lien phase est fait de façon dynamique lors de l'exécution.
Lorsqu'un fichier Java est compilé, toutes les références à des variables et méthodes sont stockées dans la classe est la constante de la piscine comme une référence symbolique. Une référence symbolique est une référence logique pas une référence en réalité à un emplacement de mémoire physique.
Voici un lien vers James Fleurit JVM Internes pour plus de détails.
Constante de la piscine est une partie de
.class
fichier (et de sa représentation en mémoire) qui contient les constantes nécessaires pour exécuter le code de cette classe.Ces constantes inclure des littéraux spécifié par le programmeur et les références symboliques généré par le compilateur. Références symboliques sont essentiellement des noms de classes, de méthodes et de champs référencés dans le code. Ces références sont utilisées par la JVM pour lier votre code pour les autres classes il dépend.
Par exemple, le code suivant
produit est le suivant bytecode (
javap
de sortie)#n
ici sont des références à la constante de la piscine.#2
est une référence symbolique àSystem.out
champ,#3
est unHello, world!
chaîne et#4
est une référence symbolique àPrintStream.println(String)
méthode.Comme vous pouvez le voir, références symboliques ne sont pas juste des noms - par exemple, la référence symbolique à la méthode contient également des informations sur ses paramètres (
Ljava/lang/String;
) et le type de retour (V
signifievoid
).Vous pouvez inspecter constante de la piscine d'une classe en cours d'exécution
javap -verbose
pour la classe.Class.getName()
.cp_info constant_pool[constant_pool_count-1];
dansClassFile {..}
Le CP est une zone de mémoire très unique constante, les valeurs sont stockées pour réduire la redondance:
Dans le CP il y a seulement un objet Chaîne de caractères "Bonjour" et le compilateur remplace à la fois les lignes de la même référence. Votre .fichier de classe ne contient qu'un seul Bonjour chaîne. (La même pour les autres types).
Oui, Regardez ici: http://en.wikipedia.org/wiki/Java_class_file
Vous laissez par Exemple de comprendre d'Abord ce que Chaîne de caractères constante de la piscine signifie
la sortie sera
1 - La classe est chargée lorsque la JVM est invoquée.
2 - JVM va chercher tous les littéraux de chaîne dans le programme.
3 - tout d'Abord, il trouve le variable s qui se réfère à la traduction littérale “prasad” et il sera créé dans la mémoire
4 - Une référence pour le littéral “prasad” sera placé dans la chaîne de caractères constante du pool de mémoire.
5 - Puis il trouve un autre variable s2 qui se réfère à la même chaîne de caractères littérale “prasad“.
Maintenant que la JVM a déjà trouvé un littéral de chaîne “prasad“, à la fois la variables s et s2 wil se référer au même objet, c'est à dire “prasad“.
J'espère que ce sera utile
lire plus
http://www.journaldev.com/797/what-is-java-string-pool