深度思考类加载器

推荐观看

Method method = service.getClass().getMethod();这里的service.getClass().是使用了哪种类加载机制呢

service.getClass()是Java中获取一个对象运行时类的常用方法,返回的是该对象的Class实例。这里并没有直接涉及到类加载的过程,因为当你调用getClass()时,该对象的类已经被加载进JVM。

但关于类加载机制的问题,Java使用了一种称为委托模型(Delegation Model)的类加载机制。这个模型包括以下几个主要的类加载器:

  1. Bootstrap ClassLoader:负责加载JVM基本核心的类库,如java.lang.*,这些类库通常在$JAVA_HOME/jre/lib目录下。

  2. Extension ClassLoader:负责加载$JAVA_HOME/jre/lib/ext目录或者由系统变量java.ext.dirs指定路径中的类库。

  3. Application ClassLoader:负责加载系统类路径(ClassPath)中指定的类库。这是应用默认的类加载器,也是我们通常接触到的类加载器。

当一个类需要被加载时,按照上述顺序,首先检查较高层次的类加载器是否已经加载了该类,如果已加载,则不再继续,如果没有加载,则尝试加载。这种机制确保了类的唯一性以及安全性。

service.getClass().getMethod(...)的上下文中,service对象的类肯定已经被某个类加载器加载到了JVM中。如果你想知道是哪个类加载器加载的这个类,你可以使用service.getClass().getClassLoader()来获取。

猜你喜欢

转载自blog.csdn.net/yxg520s/article/details/132128138