Как найти собственный метод из исходного кода JVM?

#java #jvm

#java #jvm

Вопрос:

Я обнаружил, что загрузчик классов вызывает некоторый собственный код JVM, поэтому я попытался проверить этот собственный код из исходного кода JVM ниже, например, я хочу проверить метод defineClass1 , однако я обнаружил, что мне не удалось их получить. Могу ли я узнать, как найти связанный исходный код JVM на основе собственного кода, вызванного из кода Java?

http://hg.openjdk.java.net/jdk7u/jdk7u/hotspot/log?rev=defineClass1

 private native Class defineClass0(String name, byte[] b, int off, int len,
                                  ProtectionDomain pd);

private native Class defineClass1(String name, byte[] b, int off, int len,
                                  ProtectionDomain pd, String source);

private native Class defineClass2(String name, java.nio.ByteBuffer b,
                                  int off, int len, ProtectionDomain pd,
                                  String source);
  

Комментарии:

1. Может быть несколько версий, т. Е. для каждой платформы. Просто скачайте и запустите инструмент поиска текста. Поиск методов в журналах фиксации, скорее всего, завершится неудачей, я бы не ожидал, что они будут содержать такого рода информацию. — Тем не менее, я хотел бы спросить вас: что вы хотите сделать? Почему вас интересует собственный код?

2. @Thomas , я хочу изучить JVM.

Ответ №1:

Реализация вышеупомянутых методов на JNI находится в репозитории JDK, а не в HotSpot, см. src/share/native/java/lang/ClassLoader.c

Однако эти методы в конечном итоге вызывают обратный вызов JVM через JVM_DefineClassWithSource API, специфичный для HotSpot. Реализация этой функции JVM находится в репозитории HotSpot, см. src/share/vm/prims/jvm.cpp

Комментарии:

1. это именно тот ответ, который мне был нужен, большое вам спасибо.