没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子笔记264(4)(2011)51-57www.elsevier.com/locate/entcsJRebel工具演示Jevgeni Kabanov1部塔尔图大学计算机科学系爱沙尼亚塔尔图摘要JRebel最初是一个学术项目,后来成为一个成功的商业产品,被成千上万的人使用。世界各地的开发者。它扩展了Java虚拟机,提供了一种允许无缝类重载的机制。它广泛使用字节码操作,既用于即时类转换器,也用于与Java SE和EE API的大量集成。 在这个现场演示中,我们将展示如何使用它在实际项目中,将开发时间缩短8%至18%。关键词:字节码,JRebel,ClassLoader,API,回溯1引言Java EE开发的日常活动包括将应用程序部署到Java EE服务器。这一步是必要的,在应用程序已被编译并打包到一个存档根据Java EE规范。每次开发人员想要对正在运行的应用程序进行更改时,他们都需要部署它,这可能需要几秒钟(最好的情况下)到几分钟(最坏的情况更新应用程序的另一种方法是使用HotSwap协议[1],可从Java EE调试器获得。不幸的是,只允许非常有限的一组更改;即HotSwap允许更改方法体,但不允许更改类签名或继承层次结构。因此,不允许新的方法、字段或构造函数。在2006年底,我们提出了一个想法,用一种机制来扩展Java虚拟机,这种机制允许在HotSwap协议的限制之外更改类字节码[2]。 在2007年,我们开发并发布了原型最初代号为1电子邮件:ekabanov@gmail.com1571-0661 © 2011 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2011.02.00552J. Kabanov/Electronic Notes in Theoretical Computer Science 264(4)(2011)JavaRebel。在2009年,我们发布了2.0版,它支持在ClassLoader API之上的一个间接层,允许用户在他们的工作空间中编辑类和资源,而不是按照Java EE规范将它们打包到.WAR或. NET我们还引入了一个扩展API,允许在第三方应用程序中使用JavaRebel功能,以及为JavaRebel构建插件以支持框架配置的更改由于商标问题,我们还将该工具再次重命名为当我们开始开发这个工具时,大多数研究都集中在使用ClassLoader动态更新代码[3]或修改JVM来这样做[4]。最近对类似系统进行了更多的研究[5,6],但没有可用的行业工具与JRebel竞争目前,我们估计全世界有超过一万名JRebel用户这个数字包括商业用户以及各种其他许可用户,例如,开源开发人员和Scala开发人员可以申请免费许可证。本文的其余部分组织如下。在第2节中,我们回顾了问题及其范围,第3节简要概述了工具,第4节描述了技术背景,第5节介绍了支持工件和第三方扩展。这项工作得到了OU的部分支持。Tarkvara Tehnologia Aren-duskeskus,爱沙尼亚企业和爱沙尼亚科学基金会赠款号。84212问题范围2009年,我们对1000多名Java开发人员进行了一项调查,以估计在开发的重新部署阶段所花费的时间。该调查询问了服务器重新部署需要多长时间以及每小时执行多少次,并通过下图进行了总结J. Kabanov/Electronic Notes in Theoretical Computer Science 264(4)(2011)53平均每小时约10.5分钟,占总开发时间的17.5%标准差是8,这意味着实际百分比变化很大。据估计,全球Java开发人员的数量为900万。保守估计,只有一半的人为Java EE开发,我们估计全球每年的经济成本为567亿美元(假设每年48个工作周,每天5小时的编码和每小时30美元的工资)。3 工具概述JRebel安装了一个-javaagentJVM插件,用于监视类和资源 并将其更改传播到正在运行的应用程序。支持以下类型的更改• 对Java类的更改超出了HotSwap所支持的范围• 对框架配置的更改(例如Spring XML文件和注释,Struts映射等)。• 对静态资源(例如JSP、HTML、CSS、XML、.properties等)的任何更改JRebel通过重写Java类的字节码来启用版本控制。 为了做到这一点,我们使用即时字节码转换,其方式类似于动态语言编译和运行时支持。这使我们能够支持对Java类模式的更改,但不支持对类型层次结构的更改。类型的改变HotSwapJRebel方法主体是的是的添加/删除方法没有是的添加/删除构造函数没有是的添加/删除字段没有是的替换超类没有没有添加/删除已实现的接口没有没有从2.0版开始,我们扩展了ClassLoader API,允许从默认类路径之外的位置我们使用此功能允许用户使用rebel.xml配置文件在文件库中指定其项目的布局,并使应用服务器直接从这些项目中读取类和资源,而不是Java EE规范规定的.WAR或. xml归档由于构建阶段的大部分时间都花在将这些类和资源打包到归档中,因此它允许我们节省在该阶段花费的大部分时间。为了使工具更方便使用,我们提供了Eclipse,IntelliJ IDEA和NetBeans的IDE插件。这些插件通过以下方式改进了JRebel的调试:54J. Kabanov/Electronic Notes in Theoretical Computer Science 264(4)(2011)隐藏翻译过程引入的合成字段和方法。我们还为Maven构建系统提供了一个插件,它可以自动生成使用项目直接映射功能所需的rebel.xml配置文件。4技术背景为了解释JRebel是如何工作的,我们需要从Java HotSwap中没有实现对完整模式更改的支持的原因开始。本节主要参考了[7,8]以及与Thomas Wuerthinger的一些私人谈话当加载到JVM中时,对象由一个结构表示,占用一个特定大小的连续内存区域(其字段加上元数据)。为了添加一个字段,我们需要调整该结构的大小,但由于附近的区域可能已经被占用,我们需要将整个结构重新定位到一个不同的区域,那里有足够的自由空间来适应它。现在,因为我们幸运的是,对象重定位是Java一直在做的事情。Java垃圾收集器在每次压缩堆时重新定位对象。然而问题是,一个堆的抽象只是一个抽象。内存的实际布局取决于当前活动的垃圾收集器,为了与所有这些目标兼容,必须实施搬迁,在活动的垃圾收集器中。然而,这是一个相当大的挑战,因为Sun JVM至少有四个垃圾收集器(其中一些是多线程的),两个JIT编译器以及它支持的多种硬件平台和操作系统。在每个垃圾收集器中实现此功能并确保与环境的其他组件的兼容性是一项具有挑战性的任务,自2001年首次实现HotSwap以来,完整的模式更新尚未进入SunJVM。似乎向类中添加方法会更容易,但由于类布局中的优化(特别是内联的v表),它假设了重新定位和重新定位类结构,回到了同一个问题。JRebel如何解决这个问题?JRebel工作在与HotSwap不同的抽象级别上。虽然HotSwap工作在虚拟机级别,并且依赖于JVM的内部工作,但JRebel使用了JVM抽象字节码和类加载器的两个值得注意的特性。类加载器允许JRebel识别类被加载的时刻,然后转换字节码,在虚拟机和执行的代码之间创建另一个抽象层。重载类的问题是,一旦类被加载,它就不能被卸载或更改;但是我们可以根据需要自由地加载新的类。为了理解理论上如何重载类,让我们看看JRuby的实现[9]。Ruby需要支持对对象的任何运行时更改,包括添加J. Kabanov/Electronic Notes in Theoretical Computer Science 264(4)(2011)55场和方法(尽管名称不同)。JRuby在JVM上实现了这些特性,将对象视为从方法名到其实现以及从字段名到其值的运行时映射。这些方法的实现包含在匿名命名的类中,这些类在遇到方法时生成。当添加方法时,JRuby会生成一个新的匿名类,其中包含该方法的主体。由于每个匿名类都有一个唯一的名称,因此加载它们没有问题,因此应用程序可以即时更新然后,我们可以使用与JRuby相同的转换,并将所有Java类拆分为一个holder类和方法体类。不幸的是,这种方法(至少)会遇到以下问题:性能这样的设置意味着每个方法调用都将受到间接影响。我们可以优化,但应用程序至少会慢一个数量级。内存使用也会激增,因为创建了如此多的类。兼容性虽然Java是一种静态语言,但它包含了一些动态特性,如反射和动态代理。如果我们应用“JRuby”转换,那么这些特性都将无法工作,除非我们用自己的类替换引用API,因此,JRebel并不采取这样的做法。相反,我们将类转换为一个前端类,其签名与原始类兼容,并转换为一个匿名后端类,当原始类更新时,可以加载其新版本我们重写转换后的类之间的所有调用,在必要时引入间接级别。然而,我们使用先进的即时编译技术内联尽可能多的间接,我们可以,以保持性能开销最小。为了展示我们的优化程度,我们选择了Chameneos [10]基准测试,它是高度并发的,并且在多个类中实现,因此在一个简单的实现中需要大量的间接性。在启用了JRebel代理的情况下运行这个基准测试,我们可以看到与在普通配置中运行它没有明显的区别。即使我们更新了基准测试中的所有类,开销仍然低于60%。56J. Kabanov/Electronic Notes in Theoretical Computer Science 264(4)(2011)时间香草JRebelJRebel更新真实用户sys0m38.673s1m10.747s0m0.821s0m37.457s1m7.946s0m0.832s0m58.130s1m38.661s0m1.317s60%可能听起来很多,但这意味着应用程序中的每个类都要更新,这是一个特殊的情况。 我们进行了大量优化,以减少未更改类的开销,因为即使更新类的60%开销也会转化为可以忽略不计的总开销,因为通常只有一小部分应用程序被更新。5工件和扩展JRebel发行版包括一个安装程序,广泛的参考手册和配置向导。我们的网站和第三方出版物上有几十篇文章描述了JRebel在现实世界中的各种应用。我们的用户还可以使用一个拥有2000多个帖子虽然JRebel是一商业产品,一重要的部分的它的代码可以在Subversion资源库www.example.com中以开源的形式获得http://repos.zeroturnaround.com/svn/。部分不可作为开源包括即时翻译引擎和高级rebel.xml处理。Subversion仓库中提供了以下开源构件测试套件为了确保产品的稳定性和兼容性,我们编译了一个测试套件,其中包含JVM兼容性和应用程序服务器兼容性的测试用例。适用于Eclipse、IntelliJ IDEA、NetBeans和Maven的JRebel SDK和utils支持编写JRebel插件或在第三方环境中使用它的JRebel plugins适用于各种服务器的插件(Tomcat,JBoss,Weblogic,. . .)和框架(Spring,Struts,. . . )的。JRebel SDK允许第三方贡献者为JRebel提交额外的插件。到目前为止,Struts2,Stripes,Wicket和Log4J的插件已经贡献。引用[1] Java热插拔,http://java.sun.com/j2se/1.4.2/docs/guide/jpda/enhancements.html#hotswap。[2] Kabanov,Jevgeni,METHOD AND ARRANGEMENT FOR RE-LOADING A CLASS,2008(美国专利申请20080282266)。[3] Liang,S.和Bracha,G.,Java虚拟机中的动态类加载,ACM SIGPLAN通知33/10,ACM,1998年。J. Kabanov/Electronic Notes in Theoretical Computer Science 264(4)(2011)57[4] Malabarba,Scott和Pandey,Raju和Gragg,Je Joul和Barr,Earl和Barnes,J. Fritz,《对类型安全动态Java类的支持》,ECOOP[5] Gregersen,A.R.和Jørgensen ,B.N.,Extending eclipse RCP with dynamic update of active plug-ins,Journal of Object Technology6/6 [67[6] 去死吧,M。 和Küastner,C. 和Saa ke,G.,2009年第15届亚太软件工程会议(APSEC)论文集[85-92]。[7] Dmitriev , Mikhail , Towards a consumable and safe technology for runtime evolution of javalanguage applications , OOPSLA Workshop on Engineering Complex Object-Oriented Systems forEvolution,2001.[8] Thomas Wuerthinger,Dynamic Code Evolution for the Java HotSpot(TM)Virtual Machine,2009年。[9] 纳特,指挥官。和Enebo,T.E.,JRuby[10] 凯 泽 角 Pradat-Peyre , JF , Chameneos , a Concurrency Game for Java , Ada and Others. ,ACS/IEEE Int. AICCSA 03.
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功