求教:
我当前的jar文件(里面有main方法)正在运行,当对里面的某个文件更改时重新替换了jar包,为什么要重新启动进程,求大神解答一下。
java运行后,类会加载到虚拟机,你替换了,不会加载
重新替换了jar包,jar包里面包含的类文件不止一个吧,程序处理的替换了,程序直接over
你替换掉的只是文件,而不是加载到内存里的类
如果是html页面是不用重启的,因为他每次都进行调用,直接替换了就可以了。但是class文件是需要编译的,他首先加载到内存中等待调用,
当你新文件放入的时候表面是替换掉了,实际原程序还在,如果用eplise等工具是可以自动编译的,
题主您好。能够将您报错的内容贴出来。
我刚才试验了一下,替换class文件不影响原有程序的执行。
原来的代码如下:
public class Hello{
public static void main(String []args)throws Exception{
while(true){
System.out.println(new World());
Thread.sleep(1000);
}
}
}
class World{
public String toString(){
return "World";
}
}
程序输出结果为
Hello
Hello
.....
将
public String toString(){
return "World";
}
更改为
public String toString(){
return "Hello World";
}
重新编译,替换原有的class文件,程序执行结果不变。
内存中还是你原来的class字节码,并没有把新的class加载到内存中,类只有被使用到才会被加载到内存,而且只加载一次,若你原class字节码已经在内存中存在,那么就会直接被使用,若不存在,才会通过三种类加载器逐级加载,直至加载成功。