1 程序主入口
src/java.base/share/native/launcher/main.c
main函数返回了JLI_Launch()函数,位于 src/java.base/share/native/libjli/java.c
2 java.c # JLI_Launch()
JavaMain()是Java主程序的native调用。
在该方法里会执行虚拟机的初始化,获取Java程序主类及main方法,然后通过JNI调用main方法, 自此,整个JVM进程执行结束,最终退出。int JavaMain(void *_args) {
JavaMainArgs *args = (JavaMainArgs *) _args; int argc = args->argc; char **argv = args->argv; int mode = args->mode; char *what = args->what;
InvocationFunctions ifn = args->ifn;
JavaVM *vm = 0;
JNIEnv *env = 0;
jclass mainClass = NULL;
jclass appClass = NULL; // 实际启动的应用程序类
jmethodID mainID;
jobjectArray mainArgs; int ret = 0;