hostswap dcevm
什么是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 VM, 32-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
轉載于:https://www.cnblogs.com/redcreen/archive/2011/06/03/2071169.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的hostswap dcevm的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IBM等创建开放虚拟化联盟对抗VMwar
- 下一篇: Ancient China Story