【问题标题】:Advanced Code Hot Swapping in JDK 8?JDK 8 中的高级代码热交换?
【发布时间】:2015-10-29 05:25:47
【问题描述】:

我正在 JavaVM 中寻找更好的 HotSwapping。只能应用方法主体更改是可以的,但非常有限。

可用的选项是 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。这可以很容易地用于我的目的还是我不应该对此进行调查?

【问题讨论】:

  • JRebel 的一位开发人员曾经对市场上不同的代码交换解决方案做了一些概述 - stackoverflow.com/a/17642585/2269816 在我个人看来,JRebel 的工作做得很好,目前没有竞争对手可以接近.不要仅仅因为你不喜欢他们的营销而使用工具,虽然工具本身质量上乘,但主要是在伤害你自己。

标签: java jvm-hotspot hotswap


【解决方案1】:

Github 的存储库中维护了 DCEVM 的一个分支。它最近针对 Java 8 进行了更新。二进制文件可通过 GitHub 版本或downloads page 获得。

对于简单的事情,例如添加/删除方法,它应该非常可靠(通过 16 种不同配置的自动化测试验证)。但是,它仍然可能最终导致 JVM 崩溃,因此绝不应该在生产环境中使用它。

【讨论】:

  • 谢谢。我会看看。我需要它来开发,所以如果它有效,那就太棒了。
  • 我只是想动态更改 html 页面的呈现方法,以提供类似于 PHP 的体验。一旦我得到结果,我会调整页面的单元测试以期望得到更正的结果。今天我每次都要重启前端服务器,而不是每次代码更改时自动重新加载页面(只是在页面中添加了一个飞镖功能,向服务器询问状态)。
  • 非常感谢,我刚刚在 linux 上用 oracle java 1.8.0_05 x86-64 试了一下,效果很好。不过,fastdebug 很慢,所以请使用“产品”配置文件。
  • 另外,hotswapagent.org 在 DCEVM 之上构建可能会在使用 Spring、Hibernate 或仅重新加载任何指定资源时添加一个值。
  • @MartinKersten 我在聚会上非常迟到了,但这不就是 JRebel 为 java 做的吗?
【解决方案2】:

JDK 8 和 JDK 9 中的 JEP 列在 this page 中。 JEP-159 不在其中。从jep index 可以看出,JEP-159 还没有针对任何 JDK 版本,甚至不是 jdk 10。

JEP-159 状态当前为"Submitted"。进程is described如下:

一个成功的 JEP 会经历以下状态:

  • 草稿 - 由作者分发,用于初步审查和建立共识
  • 已发布 - 由作者进入 JEP 档案库以供更广泛的审查
  • 已提交 — 作者声明已准备好进行评估
  • 候选人 - 被 OpenJDK 负责人接受并纳入路线图
  • 资助 - 由小组或区域负责人判断为完全资助
  • 已完成 — 完成并交付

所以它还没有被任何路线图接受。

【讨论】:

  • 这就是为什么我想知道是否有 pre-alpha 版本或类似的可用版本。 DCEVM 项目已经相当进化了,所以我想知道为什么没有 1.7 版本并希望有 1.8 版本。
  • @MartinKersten 我不知道怎么会有任何可用的 pre-alpha 版本,因为它甚至还没有被包含在任何范围内,至少现在还没有。
  • 我希望像片段这样的东西可以安装和运行。看到 DCEVM 版本是为 JDK6 工作的,以及现在被 Oracle 雇佣了两年的人,我希望能有一些能显示当前发展的东西。我只是希望甲骨文没有决定停止自己的负担并辞去这个团队。
猜你喜欢
  • 2011-02-27
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 2014-09-16
  • 2014-02-28
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
相关资源
最近更新 更多