- 浏览: 805651 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
huan19900606:
像haskell这些脚本语言很容易定义DSL,实现对应的词法语 ...
DSL的基本介绍(groovy来进行构建) -
express_wind:
https://yq.aliyun.com/album/130 ...
qlexpress规则引擎初探 -
readxuxuegang:
博主你好。如果groovy的代码是保存在数据库里,不是文件,这 ...
在java中使用groovy怎么搞 (java and groovy) -
express_wind:
hi,兄弟,有没有兴趣来阿里巴巴专门做这方面的研究,https ...
qlexpress规则引擎初探 -
langcaiye:
有2个问题请教:1. 这里的base32算法为什么需要以负数的 ...
【原】geohash算法详解
写java代码 时候打包部署是个很头疼的问题,很是打击写代码的士气,decvm的使用能够很好的提高开发自测的效率,尤其是web类应用。收集了java中间件团队和阿里巴巴团队的两片博客,对于这个的使用做了介绍,希望做java web开发的可以使用一下呵呵。
----------------------------------------------------------------------------------------
关于hotswap(该补丁的网址http://ssw.jku.at/dcevm/) Hotswap 是一个允许在运行状态下无限制的修改加载类文件的Java虚拟机补丁。当前java虚拟机的动态加载机制只允许修改类的方法体,而打了hotswap补丁以后,可以增加,删除类属性,方法,甚至可以改变一个类的父类。 Hotswap补丁是基于GPL v2.0开源协议的。你可以通过windows,linux,mac os下载hotswap 补丁的源代码或者可执行文件。 安装hotswap 警告: 该补丁目前还处于试验阶段. 当该补丁用于调试java程序使用是,是相当稳定的。但我们不提倡在生产环境中使用该补丁。 现在提供了 32位, 64位 Windows虚拟机, 32位 Mac OS的 (从这里获得), 和32位 Linux 虚拟机的补丁. 所有的修改基于 JDK7-b102版本。 该补丁不仅能打在java7上,且打到java 6上,也一样正常工作。 在windows 启动安装程序,在控制台输入: 在Mac OS启动安装程序,终端输入: 在Mac OS启动安装程序,终端输入: 安装程序会替换掉java下 bin/client/jvm.dll 和 bin/server/jvm.dll ,并将以后的jvm.dll备份到相应目录下。还会将dcevm.jar 加到lib/ext/ 目录. 图一:hotswap补丁安装界面。 执行上述命令后,就会出现图一界面,选择将要安装该补丁的java目录,单击安装就可以了。 Ps:如果你的Linux没有图形界面,您可以从这里下载已经打好补丁的java。 使用hotswap调试java程序
hotswap在淘宝
令我们高兴的是,淘宝开发人员对该技术有着强烈的兴趣,目前已有如下团队使用的该补丁:Mytaobao开发团队,TDDL(Rtools)开发团队,HSF开发团队,交易中心等团队。 ------------------------------------------------------------------------------------------------ 目前,国际站目前还是主要在几个应用上,一个应用多的有三四十万行代码。几乎所有的产品线在这个应用上都有代码;采用分支开发,要改的代码可能只有一点也要Check out出整个工程的代码来。 这样大工程,对于开发效率的影响很大,编译一下10分钟,启动一下5分钟。苦闷的等待是时间的浪费,另一方面也是打断了开发的节奏。开发过程中,每修改了一点内容,就要编译工程、重启应用来验证。每个开发员都会要频繁重启,浪费总量上是巨大的。 当然解决大应用的关键是拆根据功能拆分成小应用,这件事国际站也在积极进行中。 Hot Swap可以在Debug时让对源文件的修改立即生效,减少编译和重启的次数,节省开发时间浪费。 Java虚拟机的缺省的Hot Swap机制只允许修改类的方法体,这个限制太大。 DCE(the Dynamic Code Evolution VM)是一个允许在运行状态下无限制的修改加载类文件的Java虚拟机补丁,即Hot Swap的加强。使用DCE以后,可以 这样的加强,完全满足平时开发时需要。DCE是基于GPL v2.0开源协议的。你可以通过Windows,Linux,Mac OS下载DCE的源代码或者可执行文件。 下面记录了DCE使用中遇到的和整理了网上提到的对DCE的问题及其解决。 Linux下,DCE目前只支持32位JVM,不支持64位JVM。 与JDK 1.6 update 26有兼容问题,使用JDK 1.6 update 25。 # 参见官网 http://ssw.jku.at/dcevm/binaries/ 的说明。 下面是在国际站开发环境集成DCE的过程中,收集的问题以及解决方法的记录总结和汇总。 1. 和asm、cglib相关的jar包冲突。 异常: 参见DCE的JIRA http://kenai.com/jira/browse/DCEVM-4 原因:dcevm.jar文件中包含了一份ASM类,版本较老,并优先加载。(阿干发现这个问题,并给出重命名包名的解决方法) 解决方法1: 重命名dcevm.jar文件中asm的包名,从 org.objectweb.asm 重命名成 dce.org.objectweb.asm。 # 在Jar文件上重命名包名 使用工具: JarJar(http://code.google.com/p/jarjar/)。 解决方法2: asm、cglib换成了新的版本:asm-3.3.1.jar、cglib-nodep-2.2.jar。 asm、cglib各版本匹配注意点: asm 1.5.3.jar 匹配 cglib-2.1.3.jar asm-2.X.jar asm-3.x.jar 匹配 cglib-nodep-2.1_3.jar 2. 动态添加的static属性,例如 private static String attrib1 = "x",调用时会显示attrib1是null。 3. 在一个正在执行的循环中,改变可能不能生效。例如: 修改为: xxx是不能输出的。 但test方法体内部的修改是可以生效的。例如: 5. Crash when running maven test goal with jmockit 参见DCE的JIRA http://kenai.com/jira/browse/DCEVM-3 6. DCEVM启动报错 把JAVA启动参数中并发GC的选项删除,如: 开发模式下,修改这些选项不会有功能上的影响。 安装程序
> java -jar dcevm-0.2-win.jar
$ sudo java -jar dcevm-0.2-mac.jar
$ sudo java -jar dcevm-0.2-linux.jar
DCE注意
问题及其解决方法
Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V
at net.sf.cglib.core.DebuggingClassWriter.<init>(DebuggingClassWriter.java:47)
at net.sf.cglib.core.DefaultGeneratorStrategy.getClassWriter(DefaultGeneratorStrategy.java:30)
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:24)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:117)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:117)
at org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.postInstantiate(CGLIBProxyFactory.java:43)
public static void main(String[] args) {
for (int i = 0; i < 10000; i++) {
test(); //sleep 1s and print something
}
}
public static void main(String[] args) {
for (int i = 0; i < 10000; i++){
test();
System.out.println("xxx");
}
}
public static void main(String[] args) {
System.out.println("xxx");
for (int i = 0; i < 10000; i++) {
test();
}
}
Must use the serial GC in the Dynamic Code Evolution VM
Could not create the Java virtual machine.
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing
-XX:CMSIncrementalDutyCycleMin=0
-XX:CMSIncrementalDutyCycle=10
一些参考资料
发表评论
-
系统分布式情况下最终一致性方案梳理
2015-09-05 19:34 40952前言 目前的应用系 ... -
Storm核心概念剖析
2015-03-20 20:42 3225最近团队中有分析的场 ... -
池和流的两种数据处理方式
2014-11-19 22:59 1385在抽象层面,想了一下,目前很多的数据处理形式,一般分为池和流 ... -
关于CodeReview(java)
2014-10-29 20:42 1898关于codereview,在平时的开发中,经常忽略的环节,参 ... -
java中各种各样的数据结构
2014-07-13 20:26 2461在java中,有非常丰富的数据结构,可能是因为大多数的软件 ... -
关于JVM的ClassLoader(笔记)
2014-07-13 12:19 1868众所周知,java是编译型的语言,写的是java文 ... -
关于事务的几个概念介绍
2014-06-06 22:22 1939啥是事务? 有一组操 ... -
开发中遇到的编码问题
2014-05-22 19:39 18791、说到编码,最大的问题就是乱码了,为啥会有乱码呢 ? 因 ... -
ThreadLocal源代码解析
2014-04-24 17:54 2402最开始的时候,理解的ThreadLocal,我的理解是这样的 ... -
关于单例模式(代码篇)
2014-04-23 10:47 2415很早的时候,转发过一篇单例模式的文章:http://iamz ... -
今天遇到的两个spring相关的两个问题
2014-04-18 21:56 2557今天在项目中写代码,遇到两个Spring的问题,记录一下。再 ... -
Activiti中的命令模式解析
2014-04-11 13:10 3188最近在看Activiti的源代码,发现是基于命令模式进行的开 ... -
关于java中的本地缓存-总结概述
2014-03-31 19:00 18364java中的本地缓存,工作后陆续用到,一直想写,一直无从下 ... -
使用guava中的EventBus构建内存级别的事件引擎
2014-03-25 19:27 6401这个EventBus是guava中比较给力的一个类,从字面 ... -
DSL的基本介绍(groovy来进行构建)
2014-03-04 23:32 17043什么是DSL? 领域特定 ... -
qlexpress规则引擎初探
2014-02-25 22:28 25103qlexpress是啥? 这个是阿里内部的一个开源的jav ... -
在java中使用groovy怎么搞 (java and groovy)
2014-01-15 23:17 10950什么是groovy? 一种基于Java虚拟机的动态语言, ... -
java中记录方法调用时间,结果按照方法的层级树状的输出
2013-12-21 17:36 4678 在java中,最常用的埋点时间的方法就 ... -
一次CMS GC问题排查过程(理解原理+读懂GC日志)
2013-12-14 22:21 41340这个是之前处理过的一个线上问题,处理过程断断续续,经历了两 ... -
令牌桶算法和漏桶算法以及流量控制浅谈
2013-11-27 23:20 20782 在双十一等大促环节,系统需要限流,外部 ...
相关推荐
Java热部署技术是一种提高开发效率的重要工具,它允许开发者在运行时修改代码并立即生效,无需重新启动应用程序服务器。在传统的开发过程中,每次修改代码后都需要重新编译、打包,然后重启服务器才能看到更改的效果...
Java热部署工具是一种在开发过程中无需重启应用服务器即可更新代码或资源的技术,极大地提高了开发效率。热部署使得开发者能够在运行时动态替换、添加或移除类,而不影响应用程序的正常运行。这种技术对于大型的、...
Java 热部署解决方案详解 Java 热部署是指在不停止应用程序的情况下,动态地更新和替换应用程序中的类、方法或资源。这种技术可以提高开发效率、缩短开发周期、降低维护成本。今天,我们将讨论实现 Java 热部署的几...
有没有在为修改java代码 反复重启tomcat而烦恼 下载热部署一切不成问题。内容:1.热部署 2.分给myeclipse 1g内存
Java 热部署技术是开发过程中的一大挑战,它旨在实现在不重启 Java 虚拟机(JVM)的情况下更新应用程序的部分代码。由于 JVM 默认仅在启动时加载类,一旦类加载,即使原始的 .class 文件发生变化,JVM 也不会自动...
“热部署页面访问”意味着这个项目不仅实现了代码的热部署,还确保了用户界面的实时更新,即修改后的页面可以直接访问,而无需手动刷新或重启浏览器。 在“rebu.zip”压缩包中,可能包含了以下文件和目录结构: - ...
美团IDEA插件实现Java应用的热部署实践 热部署是指在应用程序运行时升级软件,而不需要重新启动应用。对于Java应用程序来说,热部署就是在运行时更新Java类文件,同时触发Spring以及其他常用第三方框架的一系列重新...
为了解决这个问题,开发者通常寻求“热部署”解决方案,即在不重启服务器的情况下,能够实时应用代码变更。本篇文章将详细介绍如何在Eclipse中实现代码修改后的热部署。 首先,我们需要理解什么是热部署。热部署是...
在Java开发过程中,为了提高开发效率和调试便捷性,我们经常需要实现类的热替换(Hot Deployment),也就是在不重启应用的情况下更新或替换已加载的类。Java类热替换技术通常涉及类加载器(ClassLoader)的自定义...
Java热部署技术主要指的是在Java应用运行过程中,无需重启服务就能更新代码并立即生效的能力。这对于开发阶段提高效率和减少停机时间至关重要。虽然标准的Java虚拟机(JVM)并不直接支持类的动态加载和替换,但是...
**Java热部署插件——JRebel 6.5.2** JRebel是一款高效便捷的Java应用热部署工具,它的出现极大地提升了开发者的效率,避免了在开发过程中频繁重启应用服务器来查看代码更改的效果。标题提到的是"jrebel_6.5.2",这...
在开发过程中,为了提高效率,我们通常希望在不中断应用服务的情况下更新部署的应用程序,这就是所谓的“热部署”配置。这篇博客将探讨如何在JBoss中实现热部署。 首先,理解热部署的基本原理是至关重要的。热部署...
这篇博文“JAVA类加载器分析--热部署的缺陷”探讨了Java类加载机制以及在热部署场景下可能遇到的问题。热部署允许开发者在不重启应用的情况下更新代码,提高开发效率,但同时也存在一些挑战。 首先,我们来理解类...
"热部署"是开发者在开发过程中的一项重要功能,它允许开发者在不重启服务器的情况下更新应用代码,从而大大提高开发效率。本压缩包提供的“tomcat热部署+操作文档”旨在帮助用户实现这一功能。 首先,我们要理解...
热部署的原理是基于Java的类加载机制。当我们修改了Java类文件后,热部署机制会重新加载该类文件,并将其应用于当前的应用程序中。这要求服务器支持热部署机制,例如Tomcat、JBoss等。 eclipse配置热部署 下面是...
下面将详细介绍 JRebel 如何与 Tomcat 集成,实现项目修改后的热部署。 **1. JRebel 的工作原理** JRebel 是通过动态类加载技术,实现在运行时替换已经加载的类,以达到热部署的效果。它拦截了 JVM 的类加载过程,...
【标题】"jboss 热部署必须jar" 指的是在JBoss应用服务器上进行热部署所需的关键Java档案(jar)。热部署允许开发者在不关闭或重启服务器的情况下更新应用,大大提高了开发效率和调试速度。对于JBoss而言,这个特定...
总的来说,Java热部署是一项技术挑战,需要深入理解JVM的类加载机制、字节码操作以及可能的工具支持。通过自定义类加载器和利用ASM等字节码库,可以实现特定类的热部署,从而提高开发效率并减少系统中断的时间。然而...