你的位置:首页 > 软件开发 > Java > Java Main如何被执行?

Java Main如何被执行?

发布时间:2015-11-04 12:00:07
java应用程序的启动在在/hotspot/src/share/tools/launcher/java.c的main()函数中,而在虚拟机初始化过程中,将创建并启动Java的Main线程。最后将调用JNIEnv的CallStaticVoidMethod()来执行main方法。Ca ...

Java Main如何被执行?

  java应用程序的启动在在/hotspot/src/share/tools/launcher/java.c的main()函数中,而在虚拟机初始化过程中,将创建并启动Java的Main线程。最后将调用JNIEnv的CallStaticVoidMethod()来执行main方法。

CallStaticVoidMethod()对应的jni函数为jni_CallStaticVoidMethod,定义在/hotspot/src/share/vm/prims/jni.cpp中,而jni_CallStaticVoidMethod()又调用了jni_invoke_static(),jni_invoke_static()通过JavaCalls的call()发起对Java方法的调用

  所有来自虚拟机对Java函数的调用最终都将由JavaCalls模块来完成,JavaCalls将通过call_helper()来执行Java方法并返回调用结果,并最终调用StubRoutines::call_stub()来执行Java方法

 1 // do call 2  { JavaCallWrapper link(method, receiver, result, CHECK); 3   { HandleMark hm(thread); // HandleMark used by HandleMarkCleaner 4  5    StubRoutines::call_stub()( 6     (address)&link, 7     // (intptr_t*)&(result->_value), // see NOTE above (compiler problem) 8     result_val_address,     // see NOTE above (compiler problem) 9     result_type,10     method(),11     entry_point,12     args->parameters(),13     args->size_of_parameters(),14     CHECK15    );16 17    result = link.result(); // circumvent MS C++ 5.0 compiler bug (result is clobbered across call)18    // Preserve oop return value across possible gc points19    if (oop_result_flag) {20     thread->set_vm_result((oop) result->get_jobject());21    }22   }23  }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:Java Main如何被执行?

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。