从JVMS:
类加载器 L 可以通过直接定义 C 或委托给另一个类加载器来创建 C。如果 L 直接创建 C,我们说 L 定义了 C,或者等价地,L 是C的定义加载器。
当一个类加载器委托给另一个类加载器时,发起加载的加载器不一定是完成加载并定义类的加载器。如果 L 通过直接定义或委托创建 C,我们说 L 启动 C 的加载,或者等价地,L 是C的启动加载器。
我对这些有点困惑。
假设我们有两个类加载器:L 和 L p,并且 L p是L的父级。
如果C被在L和用L成功创建,则L是两个限定装载机和启动加载器的C,是正确的吗?
如果 C 在 L 中定义但由 L p创建,我猜 L p正在启动C 的加载程序?
但是 C 的定义 loader 是什么?因为 C 是在 L 中定义的,但不是由它直接创建的?这是个问题。
感谢所有回复。
小智 6
类加载器通常遵循委托机制。
假设代表团层次是L->Lp->Lq
和类中定义Lp
在这种情况下,
L
将委托类加载到Lp
,
Lp
将委托给Lq
Lq
不会加载类和调用返回到Lp
。
Lp
将加载该类,因为它是在 中定义的Lp
并且调用返回到L
.
这里Lp
和L
是启动类加载器,Lp
是定义类加载器。
类似地,如果委托层次结构是L->Lp
并且类在 中定义L
,则
L
成为定义和启动类加载器。
Lp
不是启动类加载器。
简单地说,如果类加载器能够返回对委托链中Class实例的引用,它就是一个初始化类加载器。
归档时间: |
|
查看次数: |
461 次 |
最近记录: |