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!
Kenyataan: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