JDK 8中的高级代码热交换?

28

我正在寻找更好的JavaVM热插拔功能。仅能应用方法体更改还可以,但相当有限。

可用的选项是JRebel和一个名为Dynamic Code Evolution Virtual Machine (DCEVM)的已停止项目。

有一个JEP 159由DCEVM的核心开发人员编写。2011年的一篇博客文章提到,DCEVM的开发人员现在为Oracle工作,将其集成到JDK中。

我们是否已经有了针对JDK 8 beta的此类支持,或者它被推迟到JDK 9?

我需要热插拔以添加、删除和重命名私有方法为主。这将非常有帮助。除了JRebel之外,是否有允许我这样做的产品(其公关活动使我不满)。

DCEVM的最新支持版本是1.6u24,它仅提供32位Linux二进制文件。由于我使用的是1.7和64位Linux,这对我来说是个绊脚石。

GitHub上还有另一个名为Fakereplace的项目。这可以轻松用于我的目的,还是不应该进行调查?


5
JRebel的一位开发人员曾经对市场上不同的代码交换解决方案进行了简要概述 - https://dev59.com/0GQm5IYBdhLWcg3wrAmY#17642585。在我个人看来,JRebel做得非常好,目前没有任何竞争对手可以媲美它。如果只是因为不喜欢它们的营销而不使用一个工具,尽管该工具本身是顶级品质,这可能会对自己造成伤害。 - Tarmo R
2个回答

12

Github仓库中,有一份DCEVM的分支。该分支最近已更新到Java 8版本,并通过GitHub发布或下载页面提供二进制文件。

对于简单的操作,例如添加/删除方法,它应该是相当可靠的(经过16个不同配置的自动化测试验证)。但是,它仍然可能会导致JVM崩溃,因此绝不能在生产环境中使用。


谢谢。我会去看看的。我需要它来进行开发,如果它能够正常工作那就太棒了。 - Martin Kersten
我只想动态更改HTML页面的渲染方法,以获得类似于PHP的体验。一旦我得到结果,我将调整页面的单元测试以期望得到正确的结果。今天,每次代码更改时,我都必须重新启动前端服务器,而不是自动重新加载页面(只需向页面添加一个dart函数来询问服务器状态)。 - Martin Kersten
3
非常感谢,我刚刚在Linux上使用Oracle Java 1.8.0_05 x86-64尝试了一下,效果非常好。然而,快速调试确实相当慢,建议使用“产品”配置文件。 - Martin Vysny
2
此外,http://hotswapagent.org 在 DCEVM 的基础上构建,可以在使用 Spring、Hibernate 或重新加载任何指定资源时添加价值。 - xmedeko
@MartinKersten,我来晚了,但是JRebel不就是为Java做的吗? - eis
部分地。JRebel支持一些但不是所有的用例(据我所记,现在可能已经改变)。 - Martin Kersten

12

JDK 8和JDK 9中即将推出的JEP在this page中列出。但是,JEP-159不在其中。从jep index可以看出,JEP-159甚至还未被定位到任何JDK版本,包括jdk 10。

JEP-159的状态目前为"Submitted"。该过程is described如下:

成功的JEP将经历以下状态:

  • Draft — 由作者循环审核和达成共识
  • Posted — 由作者进入JEP存档以供更广泛的审核
  • Submitted — 由作者宣布准备好进行评估
  • Candidate — 被OpenJDK Lead接受并纳入路线图
  • Funded — 被组或区域领导判断为完全资助
  • Completed — 完成并交付
所以它还没有被接受为任何路线图。

1
这就是为什么我想知道是否有预先阶段版本或类似的版本可用。DCEVM项目已经相当发展了,所以我想知道为什么没有1.7版本,并希望有一个1.8版本。 - Martin Kersten
@MartinKersten 我不明白为什么会有任何预先-alpha版本可用,因为它甚至还没有被包含在任何范围内,至少目前还没有。 - eis
2
我希望有一种类似于片段的东西,可以安装和运行。看到DCEVM版本适用于JDK6,并且那些被Oracle雇用两年的人,我希望有一些能展示当前开发情况的东西。我只是希望Oracle没有决定停止自己的努力并辞去这个团队。 - Martin Kersten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接