编译期:.java文件通过Java编译器编译成.class字节码文件,这个过程属于编译期。
运行期:将class文件加载到内存,并对数据进行校验、准备、解析、初始化,称为
可以用虚拟机直接使用的JAVA类型的过程,被称为类加载过程。
从JVM的角度,类加载器主要由两种类型:启动类加载器与其他类加载器。
启动类加载器:
属于虚拟机的一部分由C++ 语言实现,加载存放在<JAVA_HOME>\lib目录中或者被
-Xbootclasspath参数所指定路径中的,可被虚拟机识别的类库。当Java程序直接,
如果自定义加载器想要把加载请求委派给引导类加载器的话,可直接用null代替。
其他类加载器:
由Java语言实现,在JVM之外,并且继承抽象类java.lang.ClassLoader,可以被Java的程序直接饮用。常见的有:扩展类加载器、应用程序类加载器、自定义类加载器。
双亲委派模型
当一个类加载器收到类加载的请求时,它会把请求委派给父加载器,并向上传递,最终传递到
顶层的启动类加载器。当父加载器无法完成当前加载请求时,子加载器才会尝试自己去加载。
为什么要用委托机制?
为了防止内存中出现多份同样的字节码。
例如:
假设有两个类,类1,类2。不委托只是自己加载System类,
则类1,类2都会加载一份System类,导致系统出现两份System字节码。
而使用委托机制,会向父类Bootstrap查找,如果找不到再向下。
此时System在Bootstrap中找到并加载,如果类2也要加载System,也是从Bootstrap中查找,
此时Bootstrap中已经加载过System了就可以直接返回内存中的System而不用再次加载,造成内存
中有两份System字节码的现象。
520



被折叠的 条评论
为什么被折叠?



