我使用eclipse(编写,调试)作为IDE。在调试模式下,当我进行一些更改时,比如初始化局部变量,它们会自动反映出来。
但是其他改变,比如改变静态变量的值;有时候我会收到一条消息,说我需要重新启动VM,有时我不会。
现在的问题是自动反映什么样的变化,什么不变。
我使用远程调试,但是从eclipse运行程序会有什么不同吗?
答案 0 :(得分:3)
你看到Hotswap正在行动中。它仅限于更改方法体。更多信息here。
答案 1 :(得分:2)
它不是IDE功能,而是远程调试的VM功能。 VM现在可以在变量初始化器的方法中处理逻辑中的简单更改,但不能处理更改的类结构。
当您的类结构没有改变时,正常处理重新加载:您不删除或添加成员,方法或内部类,因为添加成员或内部类会更改为类内存分配的大小。方法不会改变内存大小,但会改变它们的结构。
Here你可以找到一些解释。
答案 2 :(得分:0)
在远程调试中,根本无法进行热代码替换,因为eclipse无法在不同的JVM中交换类文件。
远程调试器连接到另一个虚拟机并监视在该远程计算机内执行的代码。只是源文件是本地的。
答案 3 :(得分:0)
静态变量是类变量,它们在类之后被实例化。它们在类加载时实例化。因此,更改静态变量将要求VM重新加载并实例化已更改的静态变量。
这就是我能为你提出的问题。
答案 4 :(得分:0)
HotSwap非常有限,它只能重新加载简单的方法体变化。
看一下JRebel,它也可以重新加载其他代码更改(比如添加/删除字段/方法/注释/枚举值等)。 详见feature list。
(请注意,JRebel是商业产品,可为OSS和Scala开发人员提供免费许可。)