在这种情况下,是否会在同一JVM实例中两次加载同一类?

时间:2019-01-04 15:16:21

标签: java classloader

B类应加载与加载A类(proof-link)相同的ClassLoader。

class A {

   B fld = new B();

   void f() {
      B loc_var = new B();
   {

}

但是会发生什么事,如果B类之前已经被其他类加载器加载过?

任何类仅加载一次。但是,由不同的clas-loader加载的类是不同的类。

那么 B类将由A类的类加载器再加载一次,并且两个不同的(!)类将共存(在同一JVM实例中)?

1 个答案:

答案 0 :(得分:1)

这取决于这两个ClassLoader的类型。 JVM具有三种:引导类加载器,扩展类加载器和应用程序类加载器。查找类时,首先,JVM将在Bootstrap ClassLoader中查找,然后在Extension和Application中查找。因此,如果两个ClassLoader是不同的类型,则Class将仅加载一次。如果两个ClassLoader都是Application ClassLoader,它将加载两次。使用哪个类,取决于调用者的ClassLoader。