У меня есть вопрос относительно методов, которые появляются в стеке при выполнении Java-программы. Я инструктировал код для регистрации, когда запуск метода и когда метод завершается (подумайте о AOP до и после). Я создаю журнал для каждой темы. Результаты в основном такие, как ожидалось, с небольшими различиями.
- При обнаружении отражающего вызова регистрируется не только
java.lang.reflect.Method#invoke
, но и дополнительные вызовы, такие как sun.reflect.DelegatingMethodAccessorImpl#invoke
. Я предполагаю, что это связано со скрытыми фреймами, обсуждаемыми в документации StackWalker .
- Существуют дополнительные вызовы, в основном
java.lang.ClassLoader.loadClass
, но также sun.instrument.InstrumentationImpl.transform
(помните, я прибавляю код!). Это методы, у которых есть стековые фреймы, но в классах приложения нет сайтов вызовов.
У меня два вопроса:
- Есть ли список всех методов или критерий, определяющий методы, для которых вызовы будут скрыты (например, "все методы, определенные в классах в пакетах, начинающихся с
sun.
)?
- Есть ли список всех методов или критерий, определяющий методы, которые вызываются JVM без места вызова в коде пользователя?
Спасибо