Rumah > Java > javaTutorial > Bagaimana Java Menjana Kod Hash Apabila `hashCode()` Tidak Ditindih?

Bagaimana Java Menjana Kod Hash Apabila `hashCode()` Tidak Ditindih?

Mary-Kate Olsen
Lepaskan: 2024-10-31 21:17:02
asal
524 orang telah melayarinya

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

Gelagat Kod Hash Lalai dalam Java

Jika kaedah hashCode() tidak ditindih, memanggilnya pada objek dalam Java menghasilkan sistem -kod cincang yang dijana.

Mekanisme Asas

Dalam HotSpot JVM, Kod cincang biasanya ditentukan oleh salah satu kaedah berikut:

  • Nombor Rawak (Lalai dalam Java 7): Nombor rawak dijana dan disimpan dalam pengepala objek. Pendekatan lalai ini memperkenalkan kemungkinan keadaan perlumbaan atau kelewatan dalam persekitaran yang sangat serentak.
  • Penjana Rawak Setempat-Benang (Lalai dalam Java 8): Penjana rawak setempat-benang digunakan untuk elakkan keadaan perlumbaan dan tingkatkan prestasi.
  • Penunjuk Objek: Penunjuk objek dicampur dengan nilai rawak untuk menjana kod cincang. Walau bagaimanapun, kaedah ini boleh menyebabkan pengedaran jadual cincang yang lemah.

Gelagat Boleh Kawal

Tingkah laku penjanaan kod cincang boleh diubah suai menggunakan -XX: hashCode=n pilihan JVM HotSpot. Nilai berikut tersedia:

  • 0 (Lalai dalam Java 7): Penjana rawak global
  • 5 (Lalai dalam Java 8): Penjana rawak xor-shift thread-lokal
  • 1: Penunjuk objek bercampur dengan nilai rawak
  • 2: Sentiasa 1
  • 3: Autoincrementing nombor
  • 4: Penunjuk objek dipangkas kepada 32 bit

Adalah penting untuk ambil perhatian bahawa walaupun menggunakan pilihan -XX:hashCode=4, kod cincang mungkin tidak selalu sepadan dengan alamat objek disebabkan pergerakan objek yang berpotensi.

Atas ialah kandungan terperinci Bagaimana Java Menjana Kod Hash Apabila `hashCode()` Tidak Ditindih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan