首先感谢老师,老师前面有介绍到同一个classloader只会加载同限定名的类一次,而热加载需要解决这个问题依靠的是版本的概念,这里老师使用了modify也是同样的思路,还有就是类加载创建 Class 的 defineclass() 是native 方法,理论上只能通过修改编译生成的class文件,这里少了这一步,继续往下看看会不会有其他惊喜。
2017-11-22
loadTimeMap.get(className).getLoadTime() 总报java.lang.NullPointerException
估计是这一行写错了,这里是两个=号:if(loadTimeMap.get(className) == null){}
估计是这一行写错了,这里是两个=号:if(loadTimeMap.get(className) == null){}
2017-11-22
楼上的各位牛批,我是没在ManagerFactory中的load方法找到
loadClass = myClassLoader.loadClass(MY_MANAGER);
改成loadClass = myClassLoader.findClass(MY_MANAGER);直接报空指针异常
loadClass = myClassLoader.loadClass(MY_MANAGER);
改成loadClass = myClassLoader.findClass(MY_MANAGER);直接报空指针异常
2017-11-21
@lanrain 基于Tomcat可以实现3种方式的热部署,但是需要限制Tomcat使用的内存,防止内存溢出,如果发布为Jar包或者编译后的类就要根据第4章所讲的,可以自己实现Java热加载来实现
2017-11-21
这个不合理吧,有点误导啊,服务器环境中如果采用tomcat的这种方式的热部署,很容易就会内存溢出的,而且发布为jar包后,怎么替换新生成的jar包或新编译后的类?
淘宝天猫他们的不停机更新猜测应该是用web服务器做限流,然后分阶段进行更新
淘宝天猫他们的不停机更新猜测应该是用web服务器做限流,然后分阶段进行更新
2017-11-20