Java ClassLoader虚拟类实现代码热替换的示例代码
作者:lolxxs 时间:2022-06-25 03:08:52
改进思考
正常实现流程应该为继承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
标签:Java,ClassLoader,热替换
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java实现矩阵加减乘除及转制等运算功能示例
2023-07-05 04:49:53
![](https://img.aspxhome.com/file/2023/0/64050_0s.png)
Java 程序设计总复习题(java基础代码)
2022-05-11 07:02:31
使用栈的迷宫算法java版代码
2022-03-07 12:47:16
java中javaBean与Bean的深入理解
2021-11-27 13:19:11
Java Code Cache满导致应用性能降低问题解决
2021-06-18 18:17:56
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
2021-08-04 03:16:28
![](https://img.aspxhome.com/file/2023/4/64064_0s.png)
基于ThreadLocal 的用法及内存泄露(内存溢出)
2023-11-23 20:22:28
![](https://img.aspxhome.com/file/2023/9/66509_0s.png)
Java面试题冲刺第二十四天--并发编程
2023-08-31 05:39:02
![](https://img.aspxhome.com/file/2023/7/58447_0s.png)
Java @Deprecated注解的作用及传递性
2023-08-11 12:55:05
![](https://img.aspxhome.com/file/2023/7/58097_0s.png)
ToStringBuilder类的一些心得
2022-10-10 04:02:27
java实现FTP文件上传与文件下载
2023-08-16 08:28:38
spring mvc中@RequestBody注解的作用说明
2022-04-07 14:15:02
![](https://img.aspxhome.com/file/2023/4/62764_0s.png)
基于Java的打包jar、war、ear包的作用与区别详解
2023-11-17 11:41:13
JAVA抛出异常的三种形式详解
2022-06-26 22:44:32
详解java 三种调用机制(同步、回调、异步)
2023-11-25 07:59:57
springboot整合quartz项目使用案例
2023-02-13 19:57:12
![](https://img.aspxhome.com/file/2023/6/62446_0s.png)
autoMapping和autoMappingBehavior的区别及说明
2023-11-29 06:39:25
详解SpringBoot如何实现统一后端返回格式
2022-11-27 05:26:24
C#使用linq查询大数据集的方法
2023-05-24 16:52:17
MyBatis利用MyCat实现多租户的简单思路分享
2022-08-16 18:58:33
![](https://img.aspxhome.com/file/2023/6/62716_0s.png)