类的热加载(Hot Deployment)的简单例子

应用服务器一般都支持热部署(Hot Deployment),更新代码时把新编译的确类 替换旧的就行,后面的程序就执行新类中的代码。这也是由各种应用服务器的独 有的类加载器层次实现的。那如何在我们的程序中也实现这种热加载功能呢?即 要在虚拟机不关闭的情况下(比如一个),换个类,JVM 就知道加载这个新类,执 行新类中的逻辑呢?下面就简单演示这样一个热加载的例子,首先大致了解一下 类加载器。

标准 Java 启动器的类加载器层次

1. 引导类加载器(bootstrap):  加载内核 API,如 rt.jar(java.lang、 java.io 等)

2. 扩展类加载器(extension):  加载的默认扩展来自于 jre/lib/ext

3. 系统类加载器(system):    类路径上的类,如 com.unmi.*

说明:这只是标准 Java 启动器运行程序时的类加载器层次,像应用服务器中 的类加载器通常会多一两层,也是在这个基础上的延伸。上面的类加载层次存在 自上而下的委托关系,委托加载不在这里细讲。

类加载器的规则有三

1. 一致性规则:类加载器不能多次加载同一个类

2. 委托规则 :在加载一个类之前,类加载器总参考父类加载器

3. 可见性规则:类只能看到由其类加载器的委托加载的其他类,委托是类的 加载器及其所有父类加载器的递归集。(这个规则可能不太好理解,要举个例子就 很容易理解的,这里也不细说)

实际的例子演示热加载

1. 建立工程,编写代码

前面铺垫的应该够厚了,开始用个例子来说明感受类的热加载(又名热部署 Hot Deployment)。这个例子采用 Eclipse 来做,首先要建立两个普通的 Java 工程,分别是 TestHotDeployInf 和 TestHotDeployImpl。让 TestHotDeployImpl 依赖于 TestHotDeployInf 工程,即在 TestHotDeployImpl 的 Build Path 中,Projects 标签页里把 TestHotDeployInf 工程选进来,因为 编译 TestHotDeployImpl 中的类要用到 TestHotDeployInf 中的类。

然后在工程式 TestHotDeployInf 中新建一个接口(Cat.java) 和一个类 (Client.java),内容分别是:

时间: 2024-08-03 01:52:33

类的热加载(Hot Deployment)的简单例子的相关文章

漫谈JVM热加载技术(一)---目前常见的解决方案

目前的Hot Reload方案 目前一般是容器(Web Container/Framework)才有能力做到热加载.因为通过自定义的ClassLoader实例来管理(bean/page/controller/configuration),如果这些文件有变化,立即创建一个新的ClassLoader实例来加载新的资源文件.例如:tomcat/jetty/Resin/.../SEAM/Grails 1.Hot deploy 应该称之为:热部署.热部署并不神秘,最暴力的热部署是自动重启当前应用的JVM.

漫谈JVM热加载技术(三)--- Hotcode2 Adapter

Hotcode2中各个Adapter介绍 Hotcode2会在JVM启动阶段和应用运行阶段接入class文件的装载,也就是前一篇文章所说的JVM Init阶段和Runtime阶段.Adapter按照使用场景也可以分为2类,一种用是在Init阶段,还有一种是用在Runtime阶段. 1 JVM Init阶段 Init阶段的Adapter是在AgentMain.redefineJdkClasses 方法中重新定义各种JVM Class的字节码. 1.1 ClassLoaderAdapter Clas

tomcat 热部署热加载

不重启Tomcat有两种方式:热部署.热加载     1.热部署:容器状况在运行时重新部署整个项目.这类环境下一般整个内存会清空,重新加载,这类方式  有可能会造成sessin丢失等环境.tomcat 6确实可以热部署了,而且对话也没丢.  2.热加载:最好是在调试过程中使用,免患上整个项目加载,Debug标准样式支持热加载.容器状况在运行时重 新加载转变编译后的类.在这类环境下内存不会清空,sessin不会丢失,但容易造成内存溢出,或者找不到方法.一般转变类的布局和模型就会有异常,在已经有的变

第十二节--类的自动加载 -- Classes and Objects in PHP5 [12]

object|php5|加载 | = 本文为Haohappy读<<Core PHP Programming>> | = 中Classes and Objects一章的笔记 | = 翻译为主+个人心得 | = 为避免可能发生的不必要的麻烦请勿转载,谢谢 | = 欢迎批评指正,希望和所有PHP爱好者共同进步! +-------------------------------------------------------------------------------+*/ 第十二节-

第十二节--类的自动加载_php基础

/* +-------------------------------------------------------------------------------+ | = 本文为Haohappy读<<Core PHP Programming>>  | = 中Classes and Objects一章的笔记  | = 翻译为主+个人心得  | = 为避免可能发生的不必要的麻烦请勿转载,谢谢  | = 欢迎批评指正,希望和所有PHP爱好者共同进步!  +-------------

php类的自动加载操作实例详解_php技巧

本文实例讲述了php类的自动加载操作.分享给大家供大家参考,具体如下: 类的自动加载 在外面的页面中,并不需要去引入类文件,但程序会在需要一个类的时候自动去"动态加载"该类. ① 创建一个对象的时候new ② 直接使用一个类名(操作静态属性与方法) 使用__autoload魔术函数 当出现两种情况时候,就会调用该函数,该函数需要我们预先定义,在其中写好加载类文件的通用语句 function __autoload($name){ require './lib/'.$name.'.clas

类的自动加载

当你尝试使用一个未定义的类时,PHP会报告一个致命错误. 解决方法就是添加一个类,可以用include包含一个文件. 究竟你知道要用到哪个类. 但是,PHP提供了类的自动加载功能, 这可以节省编程的时间. 当你尝试使用一个PHP没有组织到的类, 它会寻找一个__autoload的全局函数. 假如存在这个函数,PHP会用一个参数来调用它,参数即类的名称. 例子6.15说明了__autoload是如何使用的. 它假设当前目录下每个文件对应一个类. 当脚本尝试来产生一个类User的实例,PHP会执行_

Android程序开发ListView+Json+异步网络图片加载+滚动翻页的例子(图片能缓存,图片不错乱)_Android

例子中用于解析Json的Gson请自己Google下载 主Activity: package COM.Example.Main; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import COM.Example.Main.R; import COM.Example.Main.stringG

提高网页加载速度的初步简单技巧方式

网页的加载速度是评估网站质量一个重要指标.原因在于大多数用户能够容忍的网页加载时间只有几秒,如果超出了访客的忍受范围他们会毫不留情地关掉你的网 页,所以网页载入速度会极大地影响网站的流量和访问.以下总结了几种可以明显提高网站加载速度的初步简单技巧方式,如果你的网站存在载入速度慢的问题不妨 与此为参考对网页做些初步优化. 网页加载提速之 – 优化网页图片文件 你的网页一定有图片,加载一个网页往往图片的总尺寸是最大的,特别是那些颜色丰富的背景图片和大副广告图片.所以一般要在同等图片质量的情况下要尽可