java双亲委派模型
时间: 2023-11-12 09:58:31 浏览: 34
Java双亲委派模型是一种类加载机制,它的基本思想是:如果一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一层的类加载器都是如此,只有当父加载器无法完成这个请求时,子加载器才会尝试自己去加载。
这种机制的好处在于可以避免重复加载已经存在的类,同时也可以保证Java核心库的安全性,因为核心库的类是由启动类加载器加载的,而启动类加载器是无法被Java程序直接引用的。
相关问题
讲一下java的双亲委派模型
Java的双亲委派模型是指当一个类加载器要加载一个类时,它会先把加载任务委派给父类加载器,如果父类加载器能够加载该类,那么加载任务就完成了。如果父类加载器无法加载该类,则该类由子类加载器自行加载并 defineClass。这个模型保证了同样的类在不同的类加载器中只会被加载一次,避免了类的重复加载和破坏Java虚拟机的隔离性。
ScriptClassLoader是双亲委派模型吗
ScriptClassLoader在Groovy中是一个特殊的类加载器,它用于加载Groovy脚本。与GroovyClassLoader类似,ScriptClassLoader也继承自java.lang.ClassLoader,因此它也可以遵循双亲委派模型。
但需要注意的是,Groovy在类加载的过程中并不完全遵循标准的双亲委派模型。Groovy在加载脚本时会使用一个特殊的类加载器链,其中包括了GroovyClassLoader、ScriptClassLoader以及其他一些用于加载Groovy相关类的类加载器。这个类加载器链的设计是为了支持Groovy的动态编译和运行时修改。
在这个特殊的类加载器链中,ScriptClassLoader被用于加载Groovy脚本以及与脚本相关的类。它会首先尝试委派给父类加载器进行加载,但如果父类加载器无法加载,ScriptClassLoader会自己尝试加载。因此,虽然ScriptClassLoader可以遵循双亲委派模型,但它也可以独立处理类加载请求。
综上所述,ScriptClassLoader可以根据需要遵循双亲委派模型,但在Groovy中它通常用于加载Groovy脚本和相关类,与标准的双亲委派模型可能有一些差异。