安德烈斯·D是正确的,我们可以使用自定义类加载器来实现这一点,以下是如何实现的详细指南:
http://www.javaworld.com/javaworld/jw-06-2006/jw-0612-dynamic.html?page=1
该文章介绍了如何编写动态Java代码,讨论了运行时源代码编译、类重新加载以及使用代理设计模式使对动态类的修改对其调用者透明的方法。
实际上,奥地利的研究人员已经编写了一个JVM,甚至允许重新加载具有不同类型层次结构的类。他们通过使用现有线程安全点生成对象及其相关引用和引用内容的完整“侧向宇宙”,一旦所有所需更改都被完全重组,就可以交换所有更改后的类。 [1] 这里是链接到他们项目的网址:
http://ssw.jku.at/dcevm/,甲骨文的赞助确实为未来计划带来了有趣的推测。
在标准的Java虚拟机中,使用JPDA的热插拔功能对方法体和字段进行的更少侵入式的更改已经是可能的,这是在Java 1.4中引入的:
docs.oracle.com/javase/1.4.2/docs/guide/jpda/enhancements.html#hotswap
我不确定它是否是第一个,但这位Sun员工在2001年发表的论文似乎是最早提出HotSpot到Hot Swap功能的提案之一。[2]
参考资料
[1] T. Würthinger, C. Wimmer, and L. Stadler, “Dynamic Code Evolution for Java,” presented at the 8th International Conference on the Principles and Practice of Programming in Java, Vienna, 2010.
[2] M. Dmitriev, “Towards flexible and safe technology for runtime evolution of java language applications,” in OOPSLA Workshop on Engineering Complex Object-Oriented Systems for Evolution, 2001.