下载此文档

深入探索Java热部署-Java开发Java经验技巧.doc


文档分类:IT计算机 | 页数:约8页 举报非法文档有奖
1/8
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/8 下载此文档
文档列表 文档介绍
深入探索Java热部署-Java开发Java经验技巧.doc:..深入探索Java热部署-Java开发Java经验技巧深入探索Java热部署原文出处:IBM/丁志君简介在Java开发领域,热部署一直是一个难以解决的问题,目前的Java虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。对于某些人型的应用来说,每次的重启都需耍花费大量的时间成本。虽然osgi架构的出现,让模块重启成为可能,但是如果模块Z间有调用关系的话,这样的操作依然会让应用岀现短暂的功能性休克。本文将探索如何在不破坏Java虚拟机现有行为的前提下,实现某个单一类的热部署,让系统无需重启就完成某个类的更新。类加载的探索首先谈一卜•何为热部署(hotswap),热部署是在不重启Java虚拟机的而提卜,能自动侦测到class文件的变化,更新运行时class的行为。Java类是通过Java虚拟机加载的,某个类的class文件在被classloader加载后,会生成对应的Class对象,之后就可以创建该类的实例。默认的虚拟机行为只会在启动时加载类,如果后期有一个类需要更新的话,单纯替换编译的class文件,Java虚拟机是不会更新止在运行的classo如果要实现热部署,最根本的方式是修改虚拟机的源代码,改变classloader的加载行为,使虚拟机能监听class文件的更新,重新加载class文件,这样的行为破坏性很大,为后续的JVM升级埋下了一个大坑。另一种友好的方法是创建自lA的classloader來加载需要监听的class,这样就能控制类加载的时机,从而实现热部署。本文将具体探索如何实现这个方案。首先需要了解一下Java虚拟机现有的加载机制。目前的加载机制,称为双亲委派,系统在使用一个classloader来加载类时,会先询问当前classloader的父类是否有能力加载,如果父类无法实现加载操作,才会将任务下放到该classloader來加载。这种自上而下的加载方式的好处是,让每个classloader执行自己的加载任务,不会重复加载类。但是这种方式却使加载顺序非常难改变,让自定义classloader抢先加载需要监听改变的类成为了一个难题。不过我们可以换一个思路,虽然无法抢先加载该类,但是仍然可以用自定义classloader创建一个功能相同的类,让每次实例化的对象都指向这个新的类。当这个类的class文件发生改变的时候,再次创建一个更新的类,之后如果系统再次发出实例化请求,创建的对象讲指向这个全新的类。卜•而来简单列举一下需要做的工作。•创建自定义的classloader,加载需要监听改变的类,在class文件发生改变的时候,重新加载该类。•改变创建对彖的行为,使他们在创建时使用口定义classloader加载的classo自定义加载器的实现自定义加载器仍然需要执行类加载的功能。这里却存在一个问题,同一个类加载器无法同时加载两个相同名称的类,由于不论类的结构如何发主变化,生成的类名不会变,而classloader只能在虚拟机停止前销毁已经加载的类,这样classloader就无法加载更新后的类了。这里有一个小技巧,让每次加载的类都保存成一个带有版本信息的class,比如加载Test,class

深入探索Java热部署-Java开发Java经验技巧 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数8
  • 收藏数0 收藏
  • 顶次数0
  • 上传人小博士
  • 文件大小94 KB
  • 时间2019-08-07
最近更新