Maison > Java > javaDidacticiel > Comment Java génère-t-il des codes de hachage lorsque `hashCode()` n'est pas remplacé ?

Comment Java génère-t-il des codes de hachage lorsque `hashCode()` n'est pas remplacé ?

Mary-Kate Olsen
Libérer: 2024-10-31 21:17:02
original
525 Les gens l'ont consulté

How Does Java Generate Hash Codes When `hashCode()` is Not Overridden?

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal