论坛首页 Java企业应用论坛

解读ClassLoader

浏览 75881 次
精华帖 (17) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-06-06  
dlovek 写道
本身有两个类继承了ClassLoader,怎么保证两个子类之间哪个是父类?1


都直接继承了ClassLoader,那就是平级的啊,不是父子类的关系。
0 请登录后投票
   发表时间:2007-06-08  
楼主分享,,
   深入java虚拟机,那本书有讲
0 请登录后投票
   发表时间:2007-06-23  
calmness 写道
dlovek 写道
本身有两个类继承了ClassLoader,怎么保证两个子类之间哪个是父类?1


都直接继承了ClassLoader,那就是平级的啊,不是父子类的关系。


JVM会自动识别类的继承和实现关系,保证父类先于子类或者接口类先于实现类加载。

blogbin
0 请登录后投票
   发表时间:2007-06-23  
问个问题,根据ClassLoader的代码,貌似用户自定义的类不是由bootstrap Loader加载就是由App Loader加载,因为那个parent.loadClass是一个递归调用,最终会到APP 的ClassLoader方法,而自定义的ClassLoader只是起到找到Class文件的作用,不知道这样理解可否正确?

还有APP ClassLoader是在何时指定的?
0 请登录后投票
   发表时间:2007-06-25  
王森的那本深入java2,里面介绍了classloader,写得不错,例子也有说服性
0 请登录后投票
   发表时间:2007-06-25  
父子委托机制,是一种classloader实现的标准,但是并没有强制的限定自定义的classloader一定要遵循这种机制,比如weblogic就可以配置classloader模型。

但是这种机制,保证了两点,一,保证了安全性,二,保证了每个classloader的边界,就是说不该你加载的类你不要去加载,否则我们知道不同的classloader都有其命名空间,保证一个类只被其中一个classloader加载,否则系统就会有多个版本的类存在,这种边界在中间件里是非常重要的。

了解classloader对于高级程序员我觉得是非常有用的,虽然我们日常非常少用到它,但是了解它的机制,对于解决很多部署问题非常有帮助,比如部署EJB过程出现的问题,以及其他的一些东西。

另外在自己实现一些组件的时候也可能应用到这方面的技术。
4 请登录后投票
   发表时间:2007-06-26  
讲的太简单了。

具体到应用服务器里,例如EJB环境,一个 ear 里有war, 等等情况,

这些都应该说到.
0 请登录后投票
   发表时间:2007-06-26  
calmness 写道


我们看到上面两个方法声明,第二个方法的第二个参数是用于设置加载类的时候是否连接该类,true就连接,否则就不连接。

说到连接,不得不在此做一下解释,在JVM加载类的时候,需要经过三个步骤,装载、连接、初始化。装载就是找到相应的class文件,读入JVM,初始化就不用说了,最主要就说说连接。

连接分三步,第一步是验证class是否符合规格,第二步是准备,就是为类变量分配内存同时设置默认初始值,第三步就是解释,而这步就是可选的,根据上面loadClass方法的第二个参数来判定是否需要解释


这里讲错了吧,你自己都说第2个参数是用于确定返回的Class是否是已经连接的,怎么又说第二个参数是用来判定是否需要解析?解析是可选的,连接不一定包含解析的。第2个参数如果是true,返回的class一定是已经连接的(是否解析取决于JVM的实现),如果是false,返回的是可能是连接的(不是初次),也可能是没有连接的(第一次)。



0 请登录后投票
   发表时间:2007-08-27  
引用
每当有一些类似于这样的文章发表时,后面总会跟着一批貌似很明白的人,说着一些类似于“讲的很好”,“不错,能否讲深点”的话,好像只有这样才显示出自己的高深。悲叹啊。
对于classloader,在项目中有谁会用到?我看对于自定义classloader,恐怕也只有在需要对class进行加密后,在classloader级进行class解密才能用得到,而这,又有几个项目需要?还不如多花点时间搞点别的。
非常反感一些人的高深。我不是针对楼主。



自己没用过就算了。。。也好意思拿出来说。你不接触新的东西,永远不知道自己的无知
0 请登录后投票
   发表时间:2007-08-27  
引用
leadyu     2007-06-25 20:14
父子委托机制,是一种classloader实现的标准,但是并没有强制的限定自定义的classloader一定要遵循这种机制,比如weblogic就可以配置classloader模型。

但是这种机制,保证了两点,一,保证了安全性,二,保证了每个classloader的边界,就是说不该你加载的类你不要去加载,否则我们知道不同的classloader都有其命名空间,保证一个类只被其中一个classloader加载,否则系统就会有多个版本的类存在,这种边界在中间件里是非常重要的。

了解classloader对于高级程序员我觉得是非常有用的,虽然我们日常非常少用到它,但是了解它的机制,对于解决很多部署问题非常有帮助,比如部署EJB过程出现的问题,以及其他的一些东西。

另外在自己实现一些组件的时候也可能应用到这方面的技术。


正解,部署和组件开发!!!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics