什么是dcevm

dcevm(DynamicCode Evolution Virtual Machine)是java hostspot的补丁(严格上来说是修改),允许(并非无限制)在运行环境下修改加载的类文件.当前虚拟机只允许修改方法体(method bodies),decvm,可以增加 删除类属性、方法,甚至改变一个类的父类。原理参见Dynamic Code Evolution for Java dcevm 原理

dcevm 是一个开源项目,遵从GPL 2.0。源文件执行文件都可从官网下载。

注意:Currently, the binary version of the VM is available for the 32-bit and 64-bit Windows VM32-bit Mac OS Soylatte VM (get it here), and 32-bit Linux VM. We plan to add binaries for 64-bit Mac and Linux VMs.Contact us, if you are interested in them.

安装

警告: 该补丁目前还处于试验阶段. 当该补丁用于调试java程序使用时,是相当稳定的。但不提倡在生产环境中使用该补丁。

1.下载安装文件 (下载地址

2.执行安装文件

#windows
> java -jar dcevm-0.2-win.jar
#mac
$ sudo java -jar dcevm-0.2-mac.jar
#linux
$ sudo java -jar dcevm-0.2-linux.jar
选中路径,执行install就完成了。如图:
查看安装程序源码发现安装过程就是将一些文件拷贝到相应的位置:
32 位 windows 使用data/bin/目录下文件 替换掉java下 bin/client/jvm.dll 和 bin/server/jvm.dll ,并将以后的jvm.dll备份到相应目录下。
将data/dcevm.jar 加到/jre/lib/ext/ 目录
64位 windows 复制 data/64/bin/server/jvm.dll到 bin/server/jvm.dll
将data/dcevm.jar 加到/jre/lib/ext/ 目录
32位 linux 如果jre/lib/i386/client/目录存在:
       复制data/lib/i386/client/libjvm.so到 jre/lib/i386/client/libjvm.so
如果jre/lib/i386/server/目录存在:
       复制data/lib/i386/server/libjvm.so到 jre/lib/i386/server/libjvm.so
将data/dcevm.jar 加到/jre/lib/ext/ 目录
64位 linux(暂时不支持) 复制data/64/lib/amd64/server/libjvm.so到 jre/lib/amd64/server/libjvm.so ()
将data/dcevm.jar 加到/jre/lib/ext/ 目录

注意:

dcevm.jar要拷贝到 jre的目录,如果指定java运行在jdk上,这个目录就是jdk下的jre目录.

linux的安装文件中并没有data/64这个目录,意味着64位linux不能正常安装?杯具啊,有时间尝试下看如何处理.

不能在linux下通过图形界面安装的童鞋可手动拷贝文件.

调试java

两种调试方式:

  • debug模式启动java程序 && eclipse remote debug
  • eclipse中debug模式启动程序

注意问题(更多问题补充中):

1.程序中动态添加的static 属性 例如 private static String a = “x”,调用时会显示a是null.

2.在一个正在执行的循环中,有些改变不能生效例如:

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");
}
}
xxx是不能输出的,但test方法体内部的修改是可以生效的.
或:
public static void main(String[] args) {
System.out.println("xxx");
for (int i = 0; i < 10000; i++) {
test();
}
}
 

更多test case

参考资料

hotswap 用户手册

Dynamic Code Evolution for the Java HotSpot TM Virtual Machine

hostspot&hostswap(包括dcevm原理介绍)

Dynamic Code Evolution for Java dcevm 原理

官方地址Dynamic Code Evolution VM

hostswap dcevm的更多相关文章

  1. Dynamic Code Evolution for Java dcevm 原理

    在hostswap dcevm中我们对Dynamic Code Evolution VM有了一个简单的了解,这篇文章将介绍Dynamic Code Evolution VM的实现原理. 有两个概念需要 ...

  2. Java资源大全中文版(Awesome最新版)

    Awesome系列的Java资源整理.awesome-java 就是akullpp发起维护的Java资源列表,内容包括:构建工具.数据库.框架.模板.安全.代码分析.日志.第三方库.书籍.Java 站 ...

  3. 国外程序员整理的Java资源大全分享

    Java 几乎是许多程序员们的入门语言,并且也是世界上非常流行的编程语言.国外程序员 Andreas Kull 在其 Github 上整理了非常优秀的 Java 开发资源,推荐给大家. 译文由 Imp ...

  4. 基于java平台的常用资源整理

    这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...

  5. 完整全面的Java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)

    构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...

  6. Java资源大全中文版(Awesome最新版)(转载)

    原文地址:http://www.cnblogs.com/best/p/5876559.html 目录 业务流程管理套件 字节码操作 集群管理 代码分析 编译器生成工具 构建工具 外部配置工具 约束满足 ...

  7. 这里整理了基于java平台的常用资源

    这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...

  8. Java资源大全

    古董级工具 这些工具伴随着Java一起出现,在各自辉煌之后还在一直使用. Apache Ant:基于XML的构建管理工具. cglib:字节码生成库. GlassFish:应用服务器,由Oracle赞 ...

  9. Github优秀java项目集合(中文版) - 涉及java所有的知识体系

    Java资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-java 就是 akullpp 发起维护的 Java 资源列表,内容 ...

随机推荐

  1. Linux3.10.0块IO子系统流程(3)-- SCSI策略例程

    很长时间以来,Linux块设备使用了一种称为“蓄流/泄流”(plugging/unplugging)的技术来改进吞吐率.简单而言,这种工作方式类似浴盆排水系统的塞子.当IO被提交时,它被储存在一个队列 ...

  2. 卷积神经网络-Dropout

    dropout 是神经网络用来防止过拟合的一种方法,很简单,但是很实用. 基本思想是以一定概率放弃被激活的神经元,使得模型更健壮,相当于放弃一些特征,这使得模型不过分依赖于某些特征,即使这些特征是真实 ...

  3. <HBase><读写><LSM>

    Overview HBase中的一个big table,首先会按行划分成一些region(这些region之间是有序的,由startkey保证),每个region分配到不同的节点进行存储.因此,reg ...

  4. 10.3.1 iOS启动画面横屏是怎么回事?

    产生这个问题的原因是编译旧版Delphi建立的项目,二种解决方法: 1.用 10.3.1 重建空工程,再把使用的单元文件重新加进来.这个操作有点麻烦,尤其对于使用单元多的文件,不过,有种方法,就是先把 ...

  5. ChinaCock界面控件介绍-TCCYearMonthSelector

    Delphi原生控件支持日期的选择,但对于只选择年月的情况,则没有好的实现.TCCYearMonthSelector正是为解决这个问题而产生的.看看运行效果图: 用法一如即往的简单,这是一个不可视控件 ...

  6. REST easy with kbmMW #21 – Delphi client stubs

    在之前的博文中,我提到新的存根生成器框架具有生成Delphi客户端存根所需的功能,使得开发Delphi智能客户端非常容易,完全支持编译时的类型检查和IDE类/属性帮助. 我没想到会把它包含在即将发布的 ...

  7. java学习笔记12(final ,static修饰符)

    final: 意思是最终的,是一个修饰符,有时候一个功能类被开发好了,不想被子类重写就用final定义, 用final修饰的最终数据成员:如果一个类的数据成员用final修饰符修饰,则这个数据成员就被 ...

  8. Python eval,exac,compile

    # eval 是把字符串类型的数据作为代码进行执行 s = "18+2" ret = eval(s) # 执行字符串类型的代码 print(ret) code = input(&q ...

  9. 新建oracle数据库表空间及删除表空间和用户

    进入oracle的命令控制台,按具体情况执行以下命令: sqlplus 默认数据库普通用户登录sqlplus / as sysdba 默认数据库管理员登录sqlplus username/passwo ...

  10. Android SO UPX壳问题小记

    网上有篇 Android SO(动态链接库)UPX加固指南,详细介绍了如何使用UPX给Android SO加壳,尝试做了一下结果ok,这里只记录遇到的几个小问题. 1.40k以下so不能加壳 kiii ...