Adakah System.nanoTime() dalam Java Benar-Benar Tidak Berguna?
Soalan:
A catatan blog bertajuk "Berhati-hati terhadap System.nanoTime() dalam Java" menimbulkan kebimbangan bahawa pada sistem x86, System.nanoTime() berkemungkinan mengembalikan nilai masa yang salah disebabkan penggunaan pembilang khusus CPU. Dalam sistem berbilang teras, penjadualan benang boleh menyebabkan pemproses dengan pembilang yang lebih rendah ditetapkan, membawa kepada nilai negatif untuk perbezaan masa.
Jawapan:
The dakwaan catatan blog telah ditulis pada tahun 2011 dan tidak lagi tepat. Kemas kini sistem pengendalian seterusnya telah menyelesaikan isu ini pada Windows dan Linux.
Windows:
Pada Pek Perkhidmatan Windows XP 2 dan lebih baru, System.nanoTime() menggunakan QueryPerformanceCounter /QueryPerformanceFrequency API, yang dilaksanakan oleh Hardware Abstraction Layer (HAL) untuk menyediakan sumber masa yang konsisten merentas pemproses.
Linux:
Linux clock_gettime(CLOCK_REALTIME) fungsi memastikan bahawa masa adalah konsisten merentas semua pemproses. Mulai versi kernel 2.6.18, sumber jam selamat digunakan jika pembilang cap masa frekuensi tidak disegerakkan atau berubah-ubah dikesan.
Seni Bina Lain:
Terdapat maklumat terhad tersedia mengenai seni bina lain, seperti SPARC dan Solaris. Walau bagaimanapun, umumnya diandaikan bahawa mesin maya moden (VM) menyediakan sumber masa yang konsisten untuk sistem pengendalian tetamu, tanpa mengira perkakasan asas.
Kesimpulan:
Sistem .nanoTime() kekal sebagai kaedah yang sah untuk mengukur perbezaan masa di Jawa. Kebimbangan yang dibangkitkan dalam catatan blog 2011 telah ditangani dan tidak terpakai pada pelaksanaan sistem moden.
Atas ialah kandungan terperinci Adakah System.nanoTime() dalam Java Masih Alat Pengukuran Masa yang Boleh Dipercayai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!