java中所谓的动态加载机制,就是我们写好了一段程序,会进行编译执行,编译时会生成我们所写的类的.class文件,这个文件中包含着一段对于此类的描述信息,包括类的路径,名字,方法等,这段信息可以生成类的.Class对象。
我们执行的时候,却并不是将所有的类都加载到内存中,而是动态的将我们用到的类加载到内存中。
当我们执行时,用到哪个类,我们就会用jvm实例化这个类,也就是将这个类加载到内存中,以便调用这个类的方法实现我们需要的功能。
实例化过程如下:
例如我们写这样一句代码A a=new A();
jvm首先在内存中的堆中查找是否存在A类的Class对象,若存在则直接用这个Class对象实例化类A,加载到内存中。
若是不存在类A的Class对象,jvm会查找类的.Class编译文件,jvm中有三个优先级别不同的类加载器,分别是BootClassLoader,ExtClassLoader,AppClassLoader,按照优先级别不同依次在不同的路径下查找类的.class编译文件。查找到编译文件后,根据编译文件中对类的描述信息,生成类的.Class对象,保存在内存中的堆中,再用这个类的.Class对象实例化类A,这样在下次实例化这个类时就可以直接用这个.Class对象实例化了。