【问题标题】:Which loader responsible to load own class In JVM哪个加载器负责在JVM中加载自己的类
【发布时间】:2017-10-22 06:26:05
【问题描述】:

我看了JVM的概念那里有类加载器

  1. 引导类加载器
  2. 扩展类加载器
  3. 应用程序类加载器

我理解这三个的概念,但我怀疑谁负责加载自己的类。

例子:

import java.lang.*;(引导类加载器)

class MyClass{
     public static void main(String args[]){
     -----------
     ----------------
     }
}

那么这里谁负责加载MyClass这里

【问题讨论】:

  • 如果你“了解所有三个的概念”,那么应该毫无疑问哪个装载机负责。你甚至不需要理解它,猜测哪个加载器负责加载属于你的应用程序的这个类……

标签: java jvm


【解决方案1】:

通过消除,它不能是第一个或第二个,因为 MyClass 不是 JRE 类,也不是 JRE 扩展。

因此,MyClass 由应用程序类加载器加载。

要检查这一点,您可以在此类实例上调用 getClassLoader() 方法:

public static void main(String args[]) {
    System.out.println(MyClass.class.getClassLoader());
}

它会输出如下内容:

sun.misc.Launcher$AppClassLoader@1d16e93

AppClassLoader 作为名字比较有意义。

你可以在this Oracle blog上找到一些参考资料:

3.应用类加载器

  1. 从应用程序类路径加载类

...

  1. 这是加载 Java 应用程序“主”类的加载器 (其中包含 main 方法的类)。

在 Sun 的实现中,这是 sun.misc.Launcher$AppClassLoader (其实是一个内部类 sun.misc.Launcher 类)。

博客条目是旧的,但这一点仍然有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 2017-06-09
    相关资源
    最近更新 更多