Dans certains cas, le code Java intercepte une NullPointerException mais ne parvient pas à enregistrer une StackTrace, laissant les développeurs perplexes car seulement " java.lang.NullPointerException" s'affiche.
Ce problème déroutant a laissé les développeurs chercher des solutions en ligne en vain. Cependant, après une enquête plus approfondie, il a été découvert que la cause première réside dans les stratégies d'optimisation de la JVM HotSpot.
Pour contrecarrer cette optimisation et restaurer la récupération de StackTrace, les développeurs doivent transmettre l'argument suivant à la JVM :
-XX:-OmitStackTraceInFastThrow
Cette optimisation découle de la gestion par la JVM des exceptions répétitives, telles que NullPointerExceptions. Lors de la première occurrence, la JVM enregistre le StackTrace complet. Cependant, avec des occurrences fréquentes, la JVM supprime la journalisation StackTrace à la fois pour des raisons de performances et pour éviter des entrées de journal excessives.
Une explication détaillée de cette implémentation peut être trouvée dans le code source de HotSpot JVM, en particulier dans le "graphKit. cpp". En ajustant la variable OmitStackTraceInFastThrow, les développeurs peuvent retrouver la visibilité de la trace de la pile et faciliter les processus de débogage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!