java演变



动态代码演化 (DCE)通过允许开发人员在运行时对应用程序进行更改来提高开发人员的生产率。 如果将DCE与JavaRebel进行比较,则可能是错误的。 我们将向您展示原因。

DCE是一种程序员可以用来修改其Java应用程序而无需在运行时直接重新启动的技术。 在调试模式下,这是一个非常有趣的功能,因为可以立即测试修改,而无需重新启动整个应用程序。 这提高了生产率,特别是在大型项目中,启动和初始化应用程序需要时间。

DCE与JavaRebel?

如果您知道零周转的商业工具JavaRebel,您可能会认为DCE听起来一样,但事实并非如此。 两种产品在技术上和日常使用上都不同。 虽然JavaRebel使用名为的参数集成到正在运行的Java虚拟机中
-javaagent,DCE本身是经过修改的虚拟机。 实际上,DCE基于Java HotSpot VM,它已经使您有机会在运行时在类上交换方法。 DCE正在扩展此基本功能,并将其添加到类中并从中删除方法和字段,从而将其发挥到最大。 您可以修改超类型,可以添加,删除和使用全新的类,等等。

还计划将DCE引入服务器上的生产环境。 这将使您有机会在运行时替换整个应用程序或仅替换其中的一小部分! 您还可以以面向方面的方式使用DCE,例如,在应用程序类中的特定方法之前和之后添加其他日志记录方法都不会出现问题。 但是目前,这些只是未来的可能性。

安装

DCE维护人员建议仅在开发人员机器上安装软件。 它对于开发和调试应用程序足够稳定,但是目前在生产服务器上使用还为时过早。 DCE提供32位和64位Windows版本,但是对于Mac OS X和Linux,您只能获得32位版本。 要安装DCE,您可以使用简单的安装程序,该程序包含在下载的文件中。 安装DCE的要求更少,您只需要在计算机上安装JRE或JDK。 就这样! 启动安装程序非常简单:

须藤java -jar dcevm-020.jar

确保以root权限启动安装程序。 第一步,安装程序(图1)将列出系统上的所有Java安装,或者,您也可以通过按“添加安装目录…”按钮来手动添加Java安装。 在列表(DCE列)上,您可以查看DCE是否已经安装到特定的Java安装中。 在安装过程中,文件jvm.dll将被子目录bin / client和bin / server中的DCE版本替换。 从原始文件将进行备份。 最后,文件dcevm.jar将被复制到Java安装目录lib / ext(对于Mixins很重要)。 要检查安装是否成功,可以在安装程序中按“测试安装”按钮,也可以在命令行上执行java –version,这将向您显示Java本身和DCE的版本(图2)。

java semphore 动态修改 java动态修改代码_linux

java semphore 动态修改 java动态修改代码_mysql_02

试试看

现在,您可以在运行时期间交换或修改类,此时,在调试模式下启动应用程序很重要。 接下来,我们将展示如何将DCE与Eclipse RCP Mail-Template一起使用。 从IDE中创建RCP邮件项目后,您要做的第一件事就是在调试器中启动它。 如果单击应用程序工具栏中的加号,则将生成并显示View类的新实例。 如果现在更改此视图(例如,更改处理显示的邮件主题的代码行),则此更改将在保存修改后的源代码文件后立即生效。 按下加号将其选中,您将看到更改的主题。 但是请记住,这仅在您的应用程序保持在调试模式下运行时才有效。 下一个问题是,如果我们向项目添加一个全新的类,那么这也将起作用吗? 让我们通过添加一个名为TestDialog的新类来进行尝试,该类从TitleAreaDialog扩展而来(请参见清单1中的示例)。

java semphore 动态修改 java动态修改代码_linux_03

为了激活这个新对话框,我们使用工具栏中的第二个按钮。 如果按下此按钮,将执行MessagePopupAction类,因此我们必须在此处进行一些小的修改(清单2),以使我们的新对话框生效。 如果在RCP邮件模板保留在调试器中的情况下执行所有这些操作,则新的对话框类将立即可用。

java semphore 动态修改 java动态修改代码_python_04

如您所见,将这种方式与DCE结合进行编程可以加快开发速度并节省时间,因为您不再需要继续重新启动应用程序。

混合蛋白

除了在调试期间修改应用程序的某些部分外,另一个有趣的功能是可以选择使用DCE提供的API在运行时动态修改类。 这意味着应用程序可以自行修改! 在DCE中,这称为Mixins ,您可以在网站上找到一个示例,其中包括一些入门指南。 Mixins的基本思想是DCE提供addMixin-Method以便向现有类添加功能。 可以根据需要经常调用此方法。 为了使Mixins工作,您必须使用–javaagent开关激活DCE,如下所示:

java-javaagent:/PATH_JDK/lib/ext/dcevm.jar

结论

最后,您可以将DCE与JavaRebel进行比较,但是如果您更深入地看,它们之间会有差异。 尽管JavaRebel挂接到现有的VM上,但DCE本身是一个VM,可以在运行时在调试应用程序时进行很多修改。 通过节省大量时间来提高开发人员的生产率。 将来,计划在服务器上也使用DCE,以便可以在不停止或重新启动整个系统的情况下对生产系统进行修改或替换。 最后但并非最不重要的一点是,DCE提供了Mixins-API,这是在运行时修改应用程序的另一种有趣的方法。



翻译自: https://jaxenter.com/dynamic-code-evolution-for-java-103680.html

java演变