#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. это именно тот ответ, который мне был нужен, большое вам спасибо.