vm/prims/jni.cpp 第1311行,jni_invoke_static()方法中第1329行通过JavaCalls::call()方法调用 Java 的main(String[])方法,源码如下:
13111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336 | static void jni_invoke_static(JNIEnv *env, JavaValue* result, jobject receiver, JNICallType call_type, jmethodID method_id, JNI_ArgumentPusher *args, TRAPS) { methodHandle method(THREAD, Method::resolve_jmethod_id(method_id)); // Create object to hold arguments for the JavaCall, and associate it with // the jni parser ResourceMark rm(THREAD); int number_of_parameters = method->size_of_parameters(); JavaCallArguments java_args(number_of_parameters); args->set_java_argument_object(&java_args); assert(method->is_static(), "method should be static"); // Fill out JavaCallArguments object args->iterate( Fingerprinter(method).fingerprint() ); // Initialize result type result->set_type(args->get_ret_type()); // Invoke the method. Result is returned as oop. JavaCalls::call(result, method, &java_args, CHECK); // Convert result if (result->get_type() == T_OBJECT || result->get_type() == T_ARRAY) { result->set_jobject(JNIHandles::make_local(env, (oop) result->get_jobject())); }} |