Maison  >  Article  >  Java  >  Comment fonctionne la méthode `hashCode()` pour les objets non remplacés en Java ?

Comment fonctionne la méthode `hashCode()` pour les objets non remplacés en Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-31 17:08:30220parcourir

How Does the `hashCode()` Method Work for Non-Overridden Objects in Java?

Comprendre les codes de hachage pour les objets non remplacés en Java

En Java, les objets héritent de la méthode hashCode() de la classe Object. Cette méthode, si elle n'est pas remplacée, fournit une implémentation par défaut pour générer un identifiant unique pour un objet.

Quel est le code de hachage par défaut ?

Lorsque le hashCode() n'est pas remplacée, la JVM HotSpot suit un comportement spécifique pour générer des codes de hachage :

  1. Nombre aléatoire sur Premier appel : Lors de l'appel initial à hashCode() ou System.identityHashCode, un nombre aléatoire est généré et stocké dans l'en-tête de l'objet.
  2. Invocation ultérieure : Les appels suivants récupèrent ceci valeur stockée.

JVM Hash Code Options

Le comportement de la génération de code de hachage par défaut peut être personnalisé à l'aide de l'option -XX:hashCode=n HotSpot JVM. Les valeurs possibles incluent :

  • 0 : Utiliser le générateur aléatoire global (par défaut dans Java 7)
  • 5 : Utiliser le générateur aléatoire xor-shift local (par défaut dans Java 8)
  • 1 : Utiliser un pointeur d'objet mélangé à une valeur aléatoire (stable entre les cycles GC)
  • 2 : Toujours utiliser 1
  • 3 : Utiliser des nombres auto-incrémentés
  • 4 : Utiliser un pointeur d'objet réduit à 32 bits

Remarque : Même avec -XX:hashCode =4, le code de hachage peut ne pas toujours pointer vers l'adresse exacte de l'objet, car les objets peuvent être déplacés en mémoire. De plus, les adresses des objets ne sont pas réparties uniformément, ce qui peut conduire à des tables de hachage déséquilibrées.

Par conséquent, il est important d'envisager de remplacer la méthode hashCode() si vous avez besoin d'un comportement de code de hachage spécifique pour vos objets.

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