美文网首页
ClassLoader-3 Main方法执行

ClassLoader-3 Main方法执行

作者: 01010100 | 来源:发表于2018-02-27 19:30 被阅读104次

Main方法执行

@see http://blog.csdn.net/roger__wong/article/details/39900717

@see http://blog.csdn.net/ROger__wonG/article/details/39972585

首先应该对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

相关文章

  • ClassLoader-3 Main方法执行

    Main方法执行 @see http://blog.csdn.net/roger__wong/article/de...

  • 04-多线程

    41. 多线程 主线程:执行主(main)方法的程序 JVM执行main方法,main方法会进入到栈内存,JVM会...

  • JAVA基础(二)

    类 main方法 main是一个静态方法.程序总是从main方法开始执行. 正则 RegexMatches.jav...

  • load 与 initialize 的区别

    1. 调用顺序 以main为分界,load方法在main函数之前执行,initialize在main函数之后执行 ...

  • Maven执行Main方法

    我们日常都用Eclipse来开发项目,使用Eclipse自带的工具执行Main 方法。但是在需要使用参数的时候,使...

  • static静态方法.単态设计模式

    static静态 静态方法 使用前不用创建任何对象 main方法是静态的,JVM在执行main方法时不创建main...

  • Android studio 执行main方法报错

    Android studio 执行main方法报错 运行 Java main 方法报错 解决办法:项目 .idea...

  • python unittest (draft)

    使用unittest.main() 方法执行 输出: 使用“unittest.main()”执行测试用例时,每个测...

  • Acitivity的启动流程

    ActivityThread activity的main方法是 程序执行的起始点:在main方法中 在attach...

  • 数据清洗例子

    下面是 Main 方法中要执行的:

网友评论

      本文标题:ClassLoader-3 Main方法执行

      本文链接:https://www.haomeiwen.com/subject/gxnmxftx.html