什么是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. react全家桶-路由

    /src目录下新增一个pages目录,用于存放渲染页面的组件 在/src/pages中新增一个Add.js文件 /src 下的index.js 路由:import React from 'react' ...

  2. 谈谈你对Java多线程的理解以及多线程的实现方式

    说线程之前先说进程,何为进程?进程就是正在进行中的程序.比如电脑同时在运行QQ进程.cmd进程.wps进程.飞秋进程等.在某一时刻,CPU只能执行一个程序,只是在做快速切换,我们肉眼看不出来. 比如: ...

  3. CSS颜色

    CSS 颜色 可以用以下方法来规定 CSS 中的颜色: ·        十六进制色 十六进制值使用三个双位数来编写,并以 # 符号开头. ·        RGB 颜色 o   所有浏览器都支持 R ...

  4. python的编码与转码

    编码问题一直是初学者的难题,搞不明白.甚至一些程序员做了多年的程序,但是编码一直整不清,下面就来认识认识编码吧. ASCII(American Standard Code for Informatio ...

  5. Android UIAutomator 定位

    AndroidUIAutomator:Android的源生测试框架的定位方式,定位速度快 一.组合定位 1.一般组合用id,class,text这三个属性会比较好一点,但也可以组合定位 2.id与te ...

  6. shell脚本实例-判断主机存活 以及企业备份方案

    1.上次写了一个脚本我那次考虑不是很周全,这次我将脚本改动了一下,这次是判断三次, 希望关注我的人可以经常交流哈.下面我写上代码. #!/usr/bin/bash while read ip do f ...

  7. python josn转换方法-字典

    python_json常用的方法 1. 什么是JSON? JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符 ...

  8. 1--常用linux命令

    参考链接:http://www.cnblogs.com/yjd_hycf_space/p/7730690.html 文件和目录 cd /home 进入 '/ home' 目录' cd .. 返回上一级 ...

  9. Centos7 使用Docker搭建Oracle测试环境

    1.更新yum yum update 2.安装Docker yum install docker 安装完成后查看Docker的版本: docker version 查看Docker的信息: docke ...

  10. POJ 2234 Matches Game(Nim博弈裸题)

    Description Here is a simple game. In this game, there are several piles of matches and two players. ...