您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页ClassLoader-3 Main方法执行

ClassLoader-3 Main方法执行

来源:二三娱乐

Main方法执行

首先应该对java命令有大概了解,是由C实现的,这里不作具体描述,参考上述文章。

从java相关开始说起。

Java.c中的LoadMainClass,该方法负责加载main函数所在的类。

该方法首先加载sun.launcher.LauncherHelper类,然后调用该类的checkAndLoadMain去加载main函数所在的类。

LauncherHelper

checkAndLoadMain( .., int mode, String what) {

// mode决定是直接传入的是主类还是jar文件,即区分java -jar xxx.jar 还是 java xxx.class 

final ClassLoader ld = ClassLoader.getSystemClassLoader();

Class c = ld.loadClass(cn);

...

}

ClassLoader

getSystemClassLoader {

initSystemClassLoader();

      return scl;

}

initSystemClassLoader{

sun.misc.Launcher l = sun.misc.Launcher.getLauncher();

scl = l.getClassLoader();

}

Launcher

getLauncher -> new Launcher()

{

localExtClassLoader = ExtClassLoader.getExtClassLoader();

this.loader = AppClassLoader.getAppClassLoader(localExtClassLoader);

Thread.currentThread().setContextClassLoader(this.loader);

}

public ClassLoader getClassLoader() {

return this.loader;

}

1、从这里可以看出加载main方法类的加载器是系统类加载器,而系统类加载器其实就是AppClassLoader

  所以,main方法默认加载器是AppClassLoder,并且传给当前线程上下文的加载器也是AppClassLoader

2、AppClassLoader/ExtClassLoader都是Launcher的内部类。先初始化ExtClassLoader,并将ExtClassLoader作为父加载器传给AppClassLoder

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务