软件编程
位置:首页>> 软件编程>> java编程>> Java ClassLoader虚拟类实现代码热替换的示例代码

Java ClassLoader虚拟类实现代码热替换的示例代码

作者:lolxxs  发布时间:2022-06-25 03:08:52 

标签:Java,ClassLoader,热替换

改进思考

  • 正常实现流程应该为继承ClassLoader虚拟类,并重写其loadClass方法和findClass方法,并在loadClass方法中调用findClass方法,在findClass方法中再调用defineClass方法

  • 实现热替换应该是替换修改过的代码,则应当维护一个Map<String, Long> 存储从全限定类名到上次文件修改时间的映射,每次定时扫描Class文件目录或检测到保存快捷键Ctrl+s时触发扫描,文件的属性也有上次修改时间,拿我们存储的和文件的属性比较即可知道文件是否修改,即是否需要重新加载Class类

  • 热替换产生了大量类信息都存储在jdk1.7的永久代,jdk1.8的元空间,如果无用的类信息过多则会造成OOM,我们自定义类加载器和其产生的Class类对象,都可以通过置空(= null)使其不可达,然后调用System.gc()就可以卸载,即类似如下代码

public class Test extends ClassLoader {
  public static void main(String[] args) throws Exception {
    MyClassLoader classLoader = new MyClassLoader();
 Class classLoaded = classLoader.loadClass("MyClass");
  classLoaded = null;
 classLoader = null;
  System.gc();  
 }
}

来源:https://blog.csdn.net/weixin_45754452/article/details/125231615

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com