`
C_J
  • 浏览: 128014 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java热部署Hotswap

阅读更多

在JAVA中类加载的层次关系就不说了。

   实现hotswap有几个基础要知道的:

 

   1,每个类classLoader有自己的名字空间,对于同一个类classLoader实例来说,名字相同的类只能存在一个,并且仅加载一次。

 

   2,在进行类加载时,首先会自底向上挨个检查是否已经加载了指定类,如果已经加载则直接返回该类的引用。如果到最高层也没有加载过指定类,那么会自顶向下挨个尝试加载,直到用户自定义类加载器,如果还不能成功,就会抛出异常。

 

   3,即使是同一个类文件,如果是由不同的类classLoader实例加载的,那么它们的类型是不相同的。

 

   4,要实现同一个类的热部署,那么新加载的类必须由不同的classLoader加载,因此不能把“委托”工作交给系统classLoader完成,我们定制的classLoader的父classLoader必须为null。

 

 

 

 

所以首先需要创建新的classLoader,继承JDK的最上ClassLoader,如下:

 

class HotswapCJ extends ClassLoader { 

 public HotswapCJ(){
   super(null);
 }
}

 

 

然后需要告诉加载器加载的class文件在哪,并且依次加载,如下:

添加了对外提供的API loadClassByStr(String [] clazns);

或者

 

class HotswapCJ extends ClassLoader { 
      private String basedir; // 需要该类加载器直接加载的类文件的基目录
    private HashSet dynaclazns; // 需要由该类加载器直接加载的类名

 public HotswapCJ(){
   super(null);
   dynaclazns=new HashSet();
 }
  public void loadClassByStr(String [] clazns) throws FileNotFoundException, IOException { 
  } 
  public void loadClassByStr(List clazns) throws FileNotFoundException, IOException { 
  } 
}

 

 

 

 

“因为你是用Java编写类载入程序的,所以你能用任何方式安装类:可通过网络下载,从某些数据库中取得,甚至在乘飞机时把它算出来。 ”

 

    那么,同样也可以从数据库中热加载类。

 

 

 

分享到:
评论
4 楼 ray_linn 2010-10-08  
RednaxelaFX 写道
C_J 写道
“因为你是用Java编写类载入程序的,所以你能用任何方式安装类:可通过网络下载,从某些数据库中取得,甚至在乘飞机时把它算出来。”

"on the fly"是“立即”“在运行中”的意思,跟坐不坐飞机没关系……


这个翻译太牛B了,learn on the fly,难不成得翻译成“坐飞机时学习”。。。。
3 楼 asme2u 2010-09-27  
http://www.ibm.com/developerworks/cn/java/j-lo-hotswapcls/index.html
2 楼 RednaxelaFX 2010-09-27  
C_J 写道
“因为你是用Java编写类载入程序的,所以你能用任何方式安装类:可通过网络下载,从某些数据库中取得,甚至在乘飞机时把它算出来。”

"on the fly"是“立即”“在运行中”的意思,跟坐不坐飞机没关系……
1 楼 fv3386 2010-09-27  
等待“待续”

相关推荐

    基于Java的Hotswap插件.zip

    Hotswap是一个免费、开源的Intellij Idea插件,通过这个插件可以实现热部署和流量重放的功能。 ## 安装 - 使用IDE内置的插件系统: <kbd>Settings/Preferences</kbd> > <kbd>Plugins</kbd> > <kbd>Marketplace...

    关于java热部署知识.doc

    除了手动编写自定义ClassLoader,还有一些开源工具可以帮助实现Java热部署,例如JRebel、JBoss Tools中的HotSwap等。这些工具能够监控源代码的变化,并自动触发类的重新加载,极大地提高了开发效率。 总的来说,...

    4.hotswap.7z

    1. **DCEVM-light-8u51-installer.jar**:DCEVM (Dynamic Class File Verifier Modification) 是一个用于Java的扩展虚拟机,它允许开发者在不重启应用的情况下,替换和更新类的字节码,实现了真正的热部署。...

    类似jboss等支持热部署的服务器原理的例子

    在Java开发环境中,热部署(Hot Deployment)是一种非常实用的功能,它允许开发者在不中断应用程序运行的情况下更新或替换已部署的代码。这大大提高了开发效率,减少了系统停机时间。以JBOSS为例,它是Java EE应用...

    idea常用的插件包括热部署

    热部署,也称为热替换(Hot Swap),是IDEA的一个强大特性。在Java应用开发中,传统方式修改代码后需要重新编译并启动应用才能看到效果,而热部署则可以在不重启应用的前提下,直接更新运行时的字节码,实现代码变动...

    idea的工具热部署插件

    其中一个提升开发效率的重要特性就是“热部署”(Hot Swap),它允许开发者在不重启应用的情况下更新代码并立即看到结果。热部署插件对于快速迭代和调试项目有着显著的优势,避免了每次修改代码后都需要重新编译、...

    深入探索Java热部署

    简介  在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然...  首先谈一下何为热部署(hotswap),热部署是在不重启 Java 虚拟机的前提

    ArthasHotSwap:此存储库是Intellij IDEA的插件,可以帮助您无需任何配置和调试即可实现热插拔。进行,只需几个简单动作就能完成)

    阿尔萨斯热交换有时,当...选择需要热部署的javasource文件或者类文件,在类名或方法名上快捷快捷键,选择“ Arthas Hot Swap”的“ Swap this class”,插件后台执行成功后会把热部署需要的命令复制到粘贴板。登录远程

    hotswap:使用 java 代理热交换类

    在Java编程领域,"hotswap"或"热交换"通常指的是在不重启应用程序的情况下,能够动态替换或更新正在运行的代码。这对于开发和调试过程非常有用,因为它允许开发者快速修复错误或更新功能,而无需中断服务。Java提供...

    Jreable.rar

    2. **JRebel**:JRebel是一款商业的Java热部署工具,它可以实时地将代码变更应用到正在运行的Java应用中,无需重启服务器。JRebel不仅支持对类的更改,还包括资源文件、配置文件等,极大地提升了开发者的生产力。 3...

    java类重载,可以用于热更新

    但有一种称为"热部署"(Hot Deployment)或"热替换"(Hot Swap)的技术,可以在不重启应用的情况下替换已加载的类。这通常在开发环境中使用,以提高调试效率。JVM通过一些工具和插件,如JRebel、JBoss ClassLoader、...

    intellij idea tomcat热部署配置教程

    对于使用IntelliJ IDEA进行Java Web应用开发的开发者来说,配置Tomcat以支持热部署是非常有帮助的。这样可以在开发过程中实时查看代码更改的效果,而无需停止和重启服务器。下面根据给定文件内容,详细介绍IntelliJ ...

    java class reload

    Java 类的热重载(Hot Deployment)或热替换(Hot Swap)是开发过程中非常实用的功能,它允许开发者在不重启应用程序服务器(如Tomcat)的情况下更新已部署的类,从而提高开发效率。在这个例子中,我们将探讨如何在...

    hot:java的热更新演示例子

    JRebel是一款流行的商业工具,它极大地简化了Java应用的热部署过程。JRebel能够在代码保存后立即反映到运行中的应用,无需重启。它通过动态加载和卸载类来实现热更新,提高了开发效率。在"hot-master"项目中,可能...

    个人需求文件+++++

    提到的`MyBatis-HotSwap`可能是MyBatis框架的一个扩展或增强,特别是在热部署方面。热部署允许开发者在不重启应用服务器的情况下更新代码,从而提高开发效率。在Java开发环境中,热部署通常需要借助如JRebel这样的...

    动态编译、加载java类

    9. **热部署(Hot Swap)**: 一些工具如JRebel、DCEVM等支持Java应用的热部署,即在不重启JVM的情况下更新类,这对于持续集成和快速迭代开发非常有帮助。 10. **安全考虑**: 动态编译和加载类可能带来安全风险,...

    无需重启生产环境热更新代码HotSwapAgent.zip

    这个项目的主要目的是避免一个...该项目 — Hotswap Agent 允许开发者随时修改代码、资源而无需重启服务,支持动态修改类结构。可以看做是 JRebel 的替代方案。这个项目仍处于测试版阶段。 标签:HotSwapAgent

    InstantRunSourceCode.zip

    四、Hot Swap(热交换) Hot Swap是Instant Run的核心技术,它允许在不重启应用的情况下替换运行中的Dalvik字节码。热交换主要适用于方法体的修改,不涉及类结构变化。通过Dex文件的动态修改,可以实现在应用运行时...

    DandD更新

    Java中实现DandD更新的关键技术之一是Java HotSwap。HotSwap允许在运行时替换已加载类的字节码,而不会中断应用程序的执行。这通常是通过Java虚拟机(JVM)的调试接口(如JDI,Java Debug Interface)实现的。开发...

    HotBeans

    在Java项目中,"main"常常代表程序的起点,而"HotBeans"可能是这个项目的特色功能,即支持热部署。 在实际的开发环境中,实现HotSwap的技术有JRebel、DCEVM(Dynamic Class File Verification Machine)等。这些...

Global site tag (gtag.js) - Google Analytics