|
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-07-30 关键字: inside jvm classloader
jvm classLoader architecture
:
Class Diagram:
类图中, BootstrapClassLoader是一个单独的java类, 其实在这里, 不应该叫他是一个java类。 因为, 它已经完全不用java实现了。 它是在jvm启动时, 就被构造起来的, 负责java平台核心库。(具体上面已经有介绍) 启动类加载实现 (其实我们不用关心这块, 但是有兴趣的, 可以研究一下 ): bootstrap classLoader 类加载原理探索 www.javaeye.com/topic/136885 自定义类加载器加载一个类的步骤 :
java 代码
用Class.forName加载类 java 代码
上图中 ClassLoader.getCallerClassLoader 就是得到调用当前forName方法的类的类加载器
java 代码
以上代码摘自sun.misc.Launch的无参构造函数Launch()。
使用线程上下文类加载器, 可以在执行线程中, 抛弃双亲委派加载链模式, 使用线程上下文里的类加载器加载类. java 代码
java 代码
java 代码
java 代码
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-10-30
jvm源码:
http://192.18.108.226/ECom/EComTicketServlet/BEGIN4CAF628524ADC775568B78AFA0541DF1/129100851/2424011667/1/541862/541862/2424011667/xmzZndezB81HYlfGYdXI/westCoastFSEND/ESD10/commsrc/j2sdk/1.5.0/jdk-1_5_0-src-scsl.zip |
|
| 返回顶楼 | |
|
最后更新时间:2007-10-30
LZ 对CLASSLOADER这么了解,有没有研究过不重启服务器,直接替换类的方法
|
|
| 返回顶楼 | |
|
最后更新时间:2007-10-30
引用 LZ 对CLASSLOADER这么了解,有没有研究过不重启服务器,直接替换类的方法
推荐一个商业产品- javarebel, 可以试用几天, 它真正实现了hot swap. 可以不重启服务器, 改了类直接生效。 官方网站 http://www.zeroturnaround.com/javarebel/ 特性: Creating new classes Changing method bodies Adding/removing methods Adding/removing constructors Adding/removing fields Overriding methods Changing method or field types Changing interfaces 我也在搞一个类似这个产品的开源实现。 最近, 正在反编译它的代码,想学点技巧。 核心思想/技术应该是 instrumentation + asm + aop + hotswap classLoader + 新老对象状态拷贝 但是因为混淆得特别厉害, 有点难搞, 大家什么好的反编译工具优化混淆吗? 我之前用了jode,jad反编译. |
|
| 返回顶楼 | |
|
最后更新时间:2007-10-31
只要能更新类就已经满足啦
LZ 加油 期待... |
|
| 返回顶楼 | |
|
最后更新时间:2007-10-31
Wicket1.3提供了一个ReloadingClassLoader,实现了部分热替换
可以参考一下 |
|
| 返回顶楼 | |
|
最后更新时间:2007-10-31
wl95421 写道 Wicket1.3提供了一个ReloadingClassLoader,实现了部分热替换
可以参考一下 其实针对类的重载,还是比较简单的,最棘手的是, 对象状态的重载。 这个问题,也是hot swap的实现逐渐变得越来越复杂的原因之一。 其实jpda(java platform debug architecture)如果能扩展实现这些 Creating new classes Changing method bodies Adding/removing methods Adding/removing constructors Adding/removing fields Overriding methods Changing method or field types Changing interfaces 也不会出现javarebel这种商业产品了。 |
|
| 返回顶楼 | |
|
最后更新时间:2007-10-31
前期也看过一些开源框架中的reload代码,大多只是重新载入了类,
苦闷的是没有看到一个非常好的实现, 在对象状态上都没有一个好的典型的设计, 也曾设计到那时而熄火了 非常期待galaxystar 对javarebel设计的原思路开放, 期待你自己的开源实现 |
|
| 返回顶楼 | |
|
最后更新时间:2007-10-31
LZ......
是不是问题一大片啊.... 现在的服务器一般都实现单类重载,但是整个context呢? 并且对象状态的重载? 对整个context重载的你是怎么看待的? 对象状态重载的又是怎么设计的? |
|
| 返回顶楼 | |
|
最后更新时间:2007-11-01
dimscar 写道 LZ......
是不是问题一大片啊.... 现在的服务器一般都实现单类重载,但是整个context呢? 并且对象状态的重载? 对整个context重载的你是怎么看待的? 对象状态重载的又是怎么设计的? 现在的服务器, 都只能实现 context reloading. OSGI粒度小一点的, 可以单个jar包的reload 我的核心设计思想: jvm代理技术 instrumentation asm字节码修改 (高性能字节码工具) aop动态代理 对象状态拷贝 对类行为的一些动态分析, 比如哪些构造函数在被调用。 |
|
| 返回顶楼 | |







