Comportement par défaut du code de hachage d'objet en Java
Si la méthode hashCode() n'est pas explicitement remplacée dans un objet Java, invoquer hashCode() sur cet objet donne un résultat spécifique basé sur l'implémentation de la machine virtuelle Java (JVM).
Comportement par défaut de la JVM HotSpot
Dans la JVM HotSpot, le comportement par défaut est la suivante :
-
Première invocation :Un nombre aléatoire est généré et stocké dans l'en-tête de l'objet.
-
Invocations ultérieures :Le le nombre aléatoire est extrait de l'en-tête de l'objet.
Par défaut, ce nombre aléatoire n'a aucune corrélation avec le contenu ou l'emplacement de l'objet.
Comportement personnalisable
Le comportement de la méthode hashCode() peut être personnalisé à l'aide de l'option -XX:hashCode=n HotSpot JVM. Cette option prend les valeurs suivantes :
- 0 : Générateur aléatoire global (par défaut dans Java 7)
- 5 : Générateur aléatoire xor-shift local (par défaut dans Java 8)
- 1 : Pointeur d'objet mélangé avec une valeur aléatoire (stable entre les événements stop-the-world)
- 2 : Toujours 1
- 3 : Nombres auto-incrémentés
- 4 : Pointeur d'objet réduit à 32 bits
Considérations spéciales
- Même avec -XX:hashCode=4, le code de hachage peut ne pas toujours pointer à l'adresse de l'objet. Les objets peuvent être déplacés après la création, mais le code de hachage reste inchangé.
- Les adresses des objets peuvent être mal distribuées, entraînant des tables de hachage déséquilibrées lors de l'utilisation de l'option -XX:hashCode=4.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
Déclaration:Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn