Comportement du code de hachage par défaut en Java
Si la méthode hashCode() n'est pas remplacée, son invocation sur un objet en Java génère un système -code de hachage généré.
Mécanisme sous-jacent
Dans HotSpot JVM, le hashCode est généralement déterminé par l'une des méthodes suivantes :
- Nombre aléatoire (par défaut dans Java 7) : Un nombre aléatoire est généré et stocké dans l'en-tête de l'objet. Cette approche par défaut introduit la possibilité de conditions de concurrence ou de retards dans des environnements hautement simultanés.
-
Générateur aléatoire local de thread (par défaut dans Java 8) : Un générateur aléatoire local de thread est utilisé pour évitez les conditions de concurrence et améliorez les performances.
-
Pointeur d'objet : Le pointeur d'objet est mélangé avec une valeur aléatoire pour générer le code de hachage. Cependant, cette méthode peut conduire à une mauvaise distribution des tables de hachage.
Comportement contrôlable
Le comportement de la génération du code de hachage peut être modifié à l'aide du -XX : hashCode=n Option JVM HotSpot. Les valeurs suivantes sont disponibles :
- 0 (par défaut en Java 7) : générateur aléatoire global
- 5 (par défaut en Java 8) : générateur aléatoire xor-shift thread-local
- 1 : Pointeur d'objet mélangé avec une valeur aléatoire
- 2 : Toujours 1
- 3 : Nombres auto-incrémentés
- 4 : Pointeur d'objet réduit à 32 bits
Il est important de noter que même lors de l'utilisation de l'option -XX:hashCode=4, le code de hachage peut ne pas toujours correspondre à l'adresse de l'objet en raison d'un mouvement potentiel de l'objet.
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