
JVM热部署
JVM Hot SwappingH1
从Java1.4启,JVM引入了HotSwap,能够在Debug的时候更新类的字节码,所有新式的IDE(包括Eclipse、IDEA和NetBeans)都支持这一技术。但是它只能用来更新方法体,这一定程度上限制了它的实用性。
在Idea中的使用H2
- HotSwap要求必须以Debug方法启动JVM
- 修改文件
- 菜单选择 Run | Reload Changed Classes 重新加载所有修改的类,或者 Build | Compile “class_name” 重新编译加载当前的类
JRebelH1
JRebel是另外一种更新类的技术。他通过监控磁盘上已经编译的.class文件来实现类更新,所以它不依赖于IDE。同时对于更新类的字节码也没有HotSwap那么多的限制
关于HotSwap和JRebel这里有更详细的介绍
DCEVMH1
DCEVM的全称是Dynamic Code Evolution VM,它是实现在Oracle’s Java HotSpot VM之上,对其进行了扩展、修改,所以它对字节码的更新也没有什么限制。可以说是相对JRebel的一个不错的免费的选择。
Github上有一个它的fork版本,针对OpenJDK进行了一些加强。
Spring-LoadedH1
Spring-Loaded是用来重新加载类文件的JVM agent。不像HotSwap,Spring-Loaded支持方法、属性以及构造方法的增删改,同时也支持注解的增删改。
ming使用H2
如下方式启动JVM
bash
java -javaagent:<pathTo>/springloaded-{VERSION}.jar -noverify SomeJavaClass
之后对类文件的修改即可更新加载到JVM中的类。
在IDE中的使用H2
Spring-Loaded并不需要以Debug方式启动JVM,直接修改文件,菜单选择 Run | Reload Changed Classes 重新加载所有修改的类,或者 Build | Compile “class_name” 重新编译加载当前的类即可
评论
新的评论
上一篇
使用springfox生成springmvc项目的swagger的文档
介绍 Swagger Swagger 是用来描述和文档化RESTful API的一个项目。 Swagger Spec 是一套规范,定义了该如何去描述一个 RESTful API 。类似的项目还有 RAML 、 API Blueprint 。 根据 Swagger Spec 来描…
下一篇
gradle-tomcat-plugin 404
问题 执行gradle-tomcat-plugin的tomcatRun任务时,服务器正常启动,没有任何异常,输出的log也没有异常,但是访问时返回404页面 原因 gradle-tomcat-plugin部署应用时,插件会去查找 src/main/webapp 目录。如果没有找…
