IntelliJ Idea tomcat热交换失败:未实现架构更改VM不支持的操作

IntelliJ Idea tomcat热交换失败:未实现架构更改VM不支持的操作,tomcat,intellij-idea,jvm,jvm-hotspot,hotswap,Tomcat,Intellij Idea,Jvm,Jvm Hotspot,Hotswap,当我尝试在项目中用更改的方法体重新加载类(热交换)时,出现了这个错误。在一切正常之前,但突然它停止了,我不记得什么可能是原因。奇怪的是,我有另一个项目,具有相同的设置和方法体热交换工作正常 以下是不工作项目的配置: 和我的虚拟机设置: -XX:PermSize=512m -XX:MaxPermSize=1024m -Xms1024m -Xmx2048m -Dcatalina.home="C:\Programy\apache-tomcat-7.0.57" -Djava.endorsed.dir

当我尝试在项目中用更改的方法体重新加载类(热交换)时,出现了这个错误。在一切正常之前,但突然它停止了,我不记得什么可能是原因。奇怪的是,我有另一个项目,具有相同的设置和方法体热交换工作正常

以下是不工作项目的配置:

和我的虚拟机设置:

-XX:PermSize=512m
-XX:MaxPermSize=1024m
-Xms1024m
-Xmx2048m
-Dcatalina.home="C:\Programy\apache-tomcat-7.0.57"
-Djava.endorsed.dirs="C:\Programy\apache-tomcat-7.0.57\endorsed"
-javaagent:C:\Programy\apache-tomcat-7.0.57/lib/spring-instrument-3.1.2.RELEASE.jar
-Dspring.profiles.active=closeMonthTest
-Dnpk.jobs.enabled=true
下面是我的工作项目的配置:

虚拟机选项:

-XX:PermSize=512m
-XX:MaxPermSize=1024m
-Xms1024m
-Xmx2048m
-Dcatalina.home="C:\Programy\apache-tomcat-7.0.57"
-Djava.endorsed.dirs="C:\Programy\apache-tomcat-7.0.57\endorsed"
-javaagent:C:\Programy\apache-tomcat-7.0.57/lib/spring-instrument-3.1.2.RELEASE.jar
-Dspring.profiles.active=test

如果没有代码,很难找到根本原因。但是,我可以编写一个人工测试用例,Java编译器将在其中创建合成方法,即使我只是更改了一个方法体:

公共类测试{
静态类内部{
私有void getPrivate(inti){
Thread.dumpStack();
}
private void getPrivate(){
Thread.dumpStack();
}
}
公共静态void main(字符串[]args){
内部=新内部();
内部.getPrivate(0);
internal.getPrivate();
}
}
javac生成一个综合方法access$000来解释这种效果,该方法允许访问内部类的私有成员

javac Test.java 
javap -c -private Test\$Inner
。。。
静态无效访问$000(教育测试$INTER);
代码:
0:aload_0
1:iload_1
2:invokespecial#2//方法getPrivate:(I)V
5:返回
静态无效访问$100(教育测试$INTERNAL);
代码:
0:aload_0
1:invokespecial#1//方法getPrivate:()V
4:返回
让我们更改两种方法在main中的顺序:

publicstaticvoidmain(字符串[]args){
内部=新内部();
internal.getPrivate();
内部.getPrivate(0);
}
因此,编译器更改了方法签名

。。。
静态无效访问$000(教育测试$INTERNAL);
代码:
0:aload_0
1:invokespecial#2//方法getPrivate:()V
4:返回
静态无效访问$100(教育测试$int);
代码:
0:aload_0
1:iload_1
2:invokespecial#1//方法getPrivate:(I)V
5:返回
从热插拔的角度来看,此更改是禁止的,因为方法
access$000
的签名已更改