Dalam beberapa keadaan, kod Java menangkap NullPointerException tetapi gagal untuk log StackTrace, menyebabkan pembangun bingung kerana hanya " java.lang.NullPointerException" dipaparkan.
Isu yang membingungkan ini menyebabkan pembangun mencari penyelesaian dalam talian tidak berjaya. Walau bagaimanapun, selepas siasatan lanjut, didapati punca utama terletak pada strategi pengoptimuman HotSpot JVM.
Untuk mengatasi pengoptimuman ini dan memulihkan pengambilan StackTrace, pembangun mesti menyerahkan hujah berikut kepada JVM:
-XX:-OmitStackTraceInFastThrow
Pengoptimuman ini berpunca daripada pengendalian JVM terhadap pengecualian berulang, seperti NullPointerExceptions. Pada kejadian awal, JVM merekodkan StackTrace yang lengkap. Walau bagaimanapun, dengan kejadian yang kerap, JVM menyekat pengelogan StackTrace untuk kedua-dua sebab prestasi dan untuk mengelakkan kemasukan log yang berlebihan.
Penjelasan terperinci tentang pelaksanaan ini boleh didapati dalam kod sumber JVM HotSpot, khususnya dalam "graphKit. cpp" fail. Dengan melaraskan pembolehubah OmitStackTraceInFastThrow, pembangun boleh mendapatkan semula keterlihatan surih tindanan dan memudahkan proses penyahpepijatan.
Atas ialah kandungan terperinci Mengapa Java NullPointerExceptions Hilang StackTraces?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!