Standard-Hash-Code-Verhalten in Java
Wenn die hashCode()-Methode nicht überschrieben wird, führt der Aufruf für ein Objekt in Java zu einem System -generierter Hash-Code.
Zugrundeliegender Mechanismus
In HotSpot JVM wird der HashCode normalerweise durch eine der folgenden Methoden bestimmt:
- Zufallszahl (Standard in Java 7): Eine Zufallszahl wird generiert und im Objektheader gespeichert. Dieser Standardansatz birgt die Möglichkeit von Race Conditions oder Verzögerungen in Umgebungen mit hoher Parallelität.
-
Thread-lokaler Zufallsgenerator (Standard in Java 8): Ein thread-lokaler Zufallsgenerator wird verwendet Vermeiden Sie Race Conditions und verbessern Sie die Leistung.
-
Objektzeiger: Der Objektzeiger wird mit einem Zufallswert gemischt, um den Hash-Code zu generieren. Diese Methode kann jedoch zu einer schlechten Verteilung der Hash-Tabelle führen.
Kontrollierbares Verhalten
Das Verhalten der Hash-Code-Generierung kann mit -XX geändert werden: hashCode=n HotSpot-JVM-Option. Folgende Werte sind verfügbar:
- 0 (Standard in Java 7): Globaler Zufallsgenerator
- 5 (Standard in Java 8): Thread-lokaler XOR-Shift-Zufallsgenerator
- 1: Objektzeiger gemischt mit Zufallswert
- 2: Immer 1
- 3: Zahlen automatisch inkrementieren
- 4: Objektzeiger auf 32 Bit gekürzt
Es ist wichtig zu beachten, dass selbst bei Verwendung der Option -XX:hashCode=4 der Hash-Code aufgrund möglicher Objektbewegungen möglicherweise nicht immer der Objektadresse entspricht.
Das obige ist der detaillierte Inhalt vonWie generiert Java Hash-Codes, wenn „hashCode()' nicht überschrieben wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn