Jvm 重复加载同一个类的结果会怎么样?

如题。。。 ,就像 hot deploy 一样,如果一个类修改了,我想让 jvm 重新加载,怎么处理,会与之前加载过的类冲突吗?
[该贴被ofbiz于2009-06-03 14:17修改过]

晕,竟然没人回,ClassLoader 是 server 自定义的加载器,它们是只加载修改过的类,还是全部加载的?

我看Java书里说,类是第一次被使用时才加载到内存。
你说类已经被加载,是不是说类已被使用?而此时你修改了类文件?想让JVM再加载一次,以刷新内存里的映象?
有这样的业务需求嘛?

这个不是工作上的,是我自己这样想的

可以,不过要先卸载,具体卸载的方法是
1.把自定义类加载器的对象=null
2.把这个类加载器的加载的所有Class对象=null
3.把所有Class对象用newInstance()方法生成的对象=null

这样虚拟机就卸载了你通过自定义类加载器加载的类了

你说的卸载的加载器的那个对象,言外之义就是说我要重新去创建一个新的加载器对像吗? 我要是重新重新创建一个加载器对象,它所加载的类之间应该是没关系的吧,不同的类加载器,所加载的类都有不同的命名空间是吧,不知道像 tomcat 在 hot deploy 的时候,是怎么处理的? 如果哪们知道 tomcat 部署的原理,希望分享一下,谢谢 !


// 在此输入java代码
public class KillThenDisappear {
public static void main(String[] args){
String path =
"c:/KillClasses/";
String classname =
"KillWithKnife";

KillClassLoader kcl = new KillClassLoader(path);

//此刻加载了KillWithKnife
Class c = kcl.loadClass(classname);

Object o = c.newInstance();

//......此段使用这个o

//Then Disappear(这里只要做到以下三点,KillWithKnife类就被卸载了)
kcl = null;
c = null;
o = null;


//注意,这里又可以重新加载类KillWithKnife进jvm了
kcl = new KillClassLoader(path);

//此刻又加载了KillWithKnife
c = kcl.loadClass(classname);

o = c.newInstance();

//又可以用这个o了
}
}

这样就可以实现动态加载了
[该贴被yellowcat于2009-06-08 10:57修改过]