偶有个程序,在启动后要在程序中修改一个类文件(.class)
那么,JVM究竟运行哪个类?

解决方案 »

  1.   

    JVM你可以看成一个大容器,你所要编译的程序都在工程里,工程又在这个大容器里(当然,区分你的是什么样的工程,不同种类的工程加载也不完全一样),JVM根据整个工程的配置可能的加载也不同,比如WEB中的工程,就根据你的注入时机确定何时加载(DI),如果是javaAplication,一般是启动JVM的时候,从主线程加载整个工程...
      

  2.   

    类是在第一次被引用的时候载入的。
    如果一个类在JVM运行时一次都没有引用过,那到JVM结束运行时,还是没有载入。类是被引用它的那个类的ClassLoader作为一个对象载入的(实际载入的是Class类的一个实例)。例如:
    class A {
      static {
        B.staticMethod();
      }
    }
    那么在A被别的类引用的时候,它引用的B类也会载入内存——因为A类初始化的时候,引用到了B类。而如果是下面这个样子:
    class A {
      public void run() {
        B.staticMethod();
      }
    }
    那么直到A的方法run在某个地方调用的时候,B类才会载入内存。