通常一个系统跑在服务器上(例如TOMCAT),如果替换上面其中一个class文件,马上就会显示出新的结果,这个是因为服务器的classlorder重新加载这个类吗?是不是热部署?一个同事说不是热部署,是JVM的热点动态编译是不是这个原因呢?我看classloader源码,loadClass这个方法首先会查询是不是已经加载了,如果已经加载了就会直接返回不会再加载一次,鉴于这个原因我想替换class文件并且显示新的效果,那肯定是classloader重新加载这个类,是不是?谢谢

解决方案 »

  1.   

    应该要重新classloader把class文件加载到内存中吧
      

  2.   

    1.类必须要加载之后才能使用
    2.是不是热部署这个我不知道(但是这个类肯定被重新加载过),但是我知道肯定不是JVM的热点动态编译,你发布的是CLASS文件,JVM还会编译吗?
      

  3.   

    jvm的工作原理是 当你需要这个类的时候它才去装载 所以当你在调用该类 而该类又没有保存在jvm的方法区的时候就会重新去找你需要的类 也就是会把你新替换的类 给加载进去