WebLogic 类加载过程
王明杰
20061012 19:28-21:59
英文水平有限,翻译的肯定有不对的地方,欢迎指正。
希望能够各位同事在使用 weblogic 的过程中带来帮助。
小注:
2006-10-12 下午,在 weblogic 中部署一个启动类,部署了近 2 个小时,weblogic 总是
提示“找不到类的异常”。心情很是郁闷。
官方原版
(19:30 开始)20061012 开始
WebLogic Server Application
Classloading
下面的部分概况的介绍了 ! 的类装载器,接着详细的介绍了
应用服务器()的类装
载过程。
Java Classloader Overview && java 类转载器综述
WebLogic Server Application Classloader Overview & WebLogic 应用服务器类装载器介
绍。
Resolving Class References Between Modules and Applications &
"
Java Classloader Overview
#$$ %
$&'()
$$*+
+$ $$
类装载器是 ! 语言的一个基本模块,类装载器是 ! 虚拟机的一部分,把
相应的类装载到内存中,类装载器负责在运行期间找到类并载入类
。每个成功的 ! 程序员都需要理解 ! 类装载器及其行为。本部分综述了
! 类装载器。
Java Classloader Hierarchy" java 类装载器
的层次
#
!
$&'()
$,&-.)
! /,'( &0
1$! )
类装载器有层次,包含了父装载器和子装载器。父装载器和子装载器直接的关
系和 ! 中的父类和子类的关系是相似的。启动类装载器是根类装载器,它将
!, 的内部类和包含在 ! /包中的类装载到 ! 虚拟机。(例如:启动类装
载器载入 ! 类。)
1
1%2+
1-. $
1-. 3
1$4
1-. (#56
!,7 8 9:;6!661)
扩这的类装载器是启动类装载器的子类装载器。扩展类装载器会自动加载放在
!, 扩展文件夹中的 ! 包。这很方便,意味着扩展 -. 不需要
向 中增加信息。然而扩展文件夹中的任何包都必须独立,只能参照
扩展文件夹中的类或者 -. 的类。(最后这句翻译的不好。)
$1-.1
$
$'( %4+
&)$
系统 类装载器继承了 -. 扩展类装载器。系统类装载器从 '( 指定
的应用类装载器(系统装载器的子类装载器)的 来加载类。
Note: <%=$=
==1
<%$=$=>$
&<%
==)
注意:在 应用服务器之外,<% 中说的“系统 类装载器”
也称为“应用类装载器”。
在 中讨论类装载器的时候,<% 使用的术语“系统”和 应用服务
器的类装载器(<% 称之为“应用类装载器”)是有区别的。
Loading a Class
#$
$$+,
? +
$$$$
$, @
,
A
$ @1
$$$$
($
##1
类装载器使用代理模式来装载一个类。子类装载器时候从它的缓存中检查被请
求的类是否已经装载。类被缓存在内存中而不是重复的从
硬盘上读取,这样可以提高类的校验效率。如果被请求的类不在它的缓存中,
那么当前的类装载器就请求它的父类来装载这个类。当父
类装载器无法找到请求的类,那么子类装载器才试图去装载这个类。如果一个
类既在父类装载器中又在子类装载器中,那么父类装载器
中的类会被加载。代理模式可以防止同样的类被多次装载。多次装载相同的类
会产生 ##1 异常。
#,
$$ #
+