日期:2014-05-20  浏览次数:20655 次

请教jvm类加载一个问题
通常一个系统跑在服务器上(例如TOMCAT),如果替换上面其中一个class文件,马上就会显示出新的结果,这个是因为服务器的classlorder重新加载这个类吗?是不是热部署?一个同事说不是热部署,是JVM的热点动态编译。。。是不是这个原因呢?

我看classloader源码,loadClass这个方法首先会查询是不是已经加载了,如果已经加载了就会直接返回不会再加载一次,鉴于这个原因我想替换class文件并且显示新的效果,那肯定是classloader重新加载这个类,是不是?谢谢

------解决方案--------------------
应该要重新classloader把class文件加载到内存中吧
------解决方案--------------------
1.类必须要加载之后才能使用
2.是不是热部署这个我不知道(但是这个类肯定被重新加载过),但是我知道肯定不是JVM的热点动态编译,你发布的是CLASS文件,JVM还会编译吗?
------解决方案--------------------
jvm的工作原理是 当你需要这个类的时候它才去装载 所以当你在调用该类 而该类又没有保存在jvm的方法区的时候就会重新去找你需要的类 也就是会把你新替换的类 给加载进去