Я выполнил jcmd <pid> VM.info
диагностическую команду для моего приложения Clojure, работающего в контейнере Docker - вот базовая информация о системе:
# JRE version: OpenJDK Runtime Environment (11.0.1+13) (build
11.0.1+13-Ubuntu-3ubuntu3.18.10.1)
# Java VM: OpenJDK 64-Bit Server VM (11.0.1+13-Ubuntu-3ubuntu3.18.10.1,
mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64)
Одна вещь, которую я заметил, это раздел Internal exceptions (10 events)
, в котором я нашел несколько примеров следующих исключений:
Classes redefined (0 events):
No events
Internal exceptions (10 events):
Event: 4103.838 Thread 0x00007f800400c800 Exception <a 'java/lang/ClassCastException'{0x00000000c78ba0b0}: class clojure.lang.Keyword cannot be cast to class java.lang.CharSequence (clojure.lang.Keyword is in unnamed module of loader 'app'; java.lang.CharSequence is in module java.base of loader
...
Теперь мне интересно, что на самом деле представляют собой эти «Внутренние исключения».
Это что-то добавлено в мой код приложения и, возможно, молча игнорируется?
Могу ли я получить больше информации (возможно, трассировку стека) о них?
Я попытался покопаться в исходном коде JDK, но не смог найти столько подробностей о «Внутренних исключениях».
Единственное, что я нашел, - это метод VMError :: print_vm_info и соответствующее поле _exceptions
в events.cpp