Cómo JVM cheques se carga una clase o no cuando se utiliza una clase primera vez

Shao:

Pregunta

cuando se ejecuta JVM siguiente código

MyObject o=new MyObject() //first access MyObject

sabemos JVM a partir de la clase de carga MiObjeto, pero me pregunto cómo saben JVM MiObjeto no está cargado.

Motivación

Me pregunto para saber porque si JVM ejecuta estos códigos

public class Main{
  public static void main(){
     ClassLoader myLoader = new ClassLoader(null) {
            @Override
            protected Class<?> findClass(String name) throws ClassNotFoundException {
                // omitted here
            }
        }
     myLoader.loadClass("MyObject"); //#1
     MyObject o=new MyObject() //#2
  }
}

que sabe que sin # 1, MiObjeto se cargará por el cargador de clase de la clase principal, pero con # 1, clase voluntad de MiObjeto cargamos en el # 2, y cómo JVM hace jueces?

Se merece:

Cada ClassLoadermantiene una lista de las clases se ha cargado hasta el momento.

Si dos diferentes ClassLoaderclases de carga una del mismo nombre, éstos son tratados por el tiempo de ejecución como dos clases no relacionadas separadas. Esto es útil porque permite diferentes versiones de la misma clase que coexisten en tiempo de ejecución. Por ejemplo, podemos desplegar varias aplicaciones web desarrolladas por diferentes equipos en la misma JVM, cada uno con sus propias bibliotecas, liberando a los desarrolladores de las diversas aplicaciones de la coordinación de las versiones de las bibliotecas que utilizan.

En su caso, si lo hacemos new MyObject()en clase Main, el cargador de clases que clase cargada Mainse le pide que cargue clase MyObject. Ese es el sistema ClassLoader, que lo conocido nada de su myLoader. Por lo tanto, el cargador de clases sistema cargará la clase MyObjectde nuevo.

Esto se puede comprobar mediante la adición de un inicializador estático a MiObjeto:

class MyObject {
    static {
        System.out.println("class MyObject has been loaded");
    }
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=345470&siteId=1
Recomendado
Clasificación