锁定老帖子 主题:解读ClassLoader
精华帖 (17) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-06
dlovek 写道 本身有两个类继承了ClassLoader,怎么保证两个子类之间哪个是父类?1
都直接继承了ClassLoader,那就是平级的啊,不是父子类的关系。 |
|
返回顶楼 | |
发表时间:2007-06-08
楼主分享,,
深入java虚拟机,那本书有讲 |
|
返回顶楼 | |
发表时间:2007-06-23
calmness 写道 dlovek 写道 本身有两个类继承了ClassLoader,怎么保证两个子类之间哪个是父类?1
都直接继承了ClassLoader,那就是平级的啊,不是父子类的关系。 JVM会自动识别类的继承和实现关系,保证父类先于子类或者接口类先于实现类加载。 blogbin |
|
返回顶楼 | |
发表时间:2007-06-23
问个问题,根据ClassLoader的代码,貌似用户自定义的类不是由bootstrap Loader加载就是由App Loader加载,因为那个parent.loadClass是一个递归调用,最终会到APP 的ClassLoader方法,而自定义的ClassLoader只是起到找到Class文件的作用,不知道这样理解可否正确?
还有APP ClassLoader是在何时指定的? |
|
返回顶楼 | |
发表时间:2007-06-25
王森的那本深入java2,里面介绍了classloader,写得不错,例子也有说服性
|
|
返回顶楼 | |
发表时间:2007-06-25
父子委托机制,是一种classloader实现的标准,但是并没有强制的限定自定义的classloader一定要遵循这种机制,比如weblogic就可以配置classloader模型。
但是这种机制,保证了两点,一,保证了安全性,二,保证了每个classloader的边界,就是说不该你加载的类你不要去加载,否则我们知道不同的classloader都有其命名空间,保证一个类只被其中一个classloader加载,否则系统就会有多个版本的类存在,这种边界在中间件里是非常重要的。 了解classloader对于高级程序员我觉得是非常有用的,虽然我们日常非常少用到它,但是了解它的机制,对于解决很多部署问题非常有帮助,比如部署EJB过程出现的问题,以及其他的一些东西。 另外在自己实现一些组件的时候也可能应用到这方面的技术。 |
|
返回顶楼 | |
发表时间:2007-06-26
讲的太简单了。
具体到应用服务器里,例如EJB环境,一个 ear 里有war, 等等情况, 这些都应该说到. |
|
返回顶楼 | |
发表时间:2007-06-26
calmness 写道 我们看到上面两个方法声明,第二个方法的第二个参数是用于设置加载类的时候是否连接该类,true就连接,否则就不连接。 说到连接,不得不在此做一下解释,在JVM加载类的时候,需要经过三个步骤,装载、连接、初始化。装载就是找到相应的class文件,读入JVM,初始化就不用说了,最主要就说说连接。 连接分三步,第一步是验证class是否符合规格,第二步是准备,就是为类变量分配内存同时设置默认初始值,第三步就是解释,而这步就是可选的,根据上面loadClass方法的第二个参数来判定是否需要解释 这里讲错了吧,你自己都说第2个参数是用于确定返回的Class是否是已经连接的,怎么又说第二个参数是用来判定是否需要解析?解析是可选的,连接不一定包含解析的。第2个参数如果是true,返回的class一定是已经连接的(是否解析取决于JVM的实现),如果是false,返回的是可能是连接的(不是初次),也可能是没有连接的(第一次)。 |
|
返回顶楼 | |
发表时间:2007-08-27
引用 每当有一些类似于这样的文章发表时,后面总会跟着一批貌似很明白的人,说着一些类似于“讲的很好”,“不错,能否讲深点”的话,好像只有这样才显示出自己的高深。悲叹啊。
对于classloader,在项目中有谁会用到?我看对于自定义classloader,恐怕也只有在需要对class进行加密后,在classloader级进行class解密才能用得到,而这,又有几个项目需要?还不如多花点时间搞点别的。 非常反感一些人的高深。我不是针对楼主。 自己没用过就算了。。。也好意思拿出来说。你不接触新的东西,永远不知道自己的无知 |
|
返回顶楼 | |
发表时间:2007-08-27
引用 leadyu 2007-06-25 20:14
父子委托机制,是一种classloader实现的标准,但是并没有强制的限定自定义的classloader一定要遵循这种机制,比如weblogic就可以配置classloader模型。 但是这种机制,保证了两点,一,保证了安全性,二,保证了每个classloader的边界,就是说不该你加载的类你不要去加载,否则我们知道不同的classloader都有其命名空间,保证一个类只被其中一个classloader加载,否则系统就会有多个版本的类存在,这种边界在中间件里是非常重要的。 了解classloader对于高级程序员我觉得是非常有用的,虽然我们日常非常少用到它,但是了解它的机制,对于解决很多部署问题非常有帮助,比如部署EJB过程出现的问题,以及其他的一些东西。 另外在自己实现一些组件的时候也可能应用到这方面的技术。 正解,部署和组件开发!!! |
|
返回顶楼 | |