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


猜你喜欢
- Springboot2.x的session和cookie有效期session和cookie的相关区别和联系就不介绍了,这里就记录一下笔记。背
- *注:可以用 adb logcat > 路径/文件名 来保存,此命令执行之时起的全部日志信息到一个文件里,ctrl + C 结束日志输
- 对 Excel 进行读写操作是生产环境下常见的业务,网上搜索的实现方式都是基于POI和JXL第三方框架,但都不是很全面。小编由于这两天刚好需
- 页眉位于文档中每个页面的顶部区域,常用于显示文档的附加信息,可以插入时间、图形、公司微标、文档标题、文件名或作者姓名等;页脚位于文档中每个页
- 本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下#define _CRT_SECURE_NO_WARNIN
- 最近这款“跳一跳”很火,在段子里面看到有人才放了张画着坐标的纸在手机上,说根据
- 小程序官方流程图如下,官方地址 : https://developers.weixin.qq.com/miniprogram/dev/fra
- using System;using System.Collections.Generic;using System.ComponentMo
- 本文实例讲述了spring mvc 实现获取后端传递的值。分享给大家供大家参考,具体如下:jsp页面怎么获取从后端传递过来的值?JSTL 方
- 前言今天介绍的是关于Spring的数据库连接以及Jdbc模板的相关API方法,虽然在学习了hibernate之后,会知道实现数据库连接一般都
- 上图:IntelliJ Idea字符集编码设置步骤详解第一步:第二步:第三步:设置完以下点击OK来源:https://blog.csdn.n
- 实现思路其实很简单,就是一个自定义的LinearLayout,并且textView能够循环垂直滚动,而且条目可以点击,显示区域最多显示2个条
- 应用场景我们开发的控制台应用,在运行阶段很有可能被用户Ctrl+C终止或是被用户直接关闭。如果我们不希望用户通过Ctrl+C终止我们的程序,
- 当初学的是通信专业,毕业以后,同学们各奔东西,去追逐自己的梦想,奔波于大大小小的工地之间。哈哈,开个玩笑,也有厉害的,进了某某研究所,嗯?他
- 公司app要求做一个扭蛋功能,其实就是一个可拖动层叠卡片列表,原理还是由一个自定义Recyclerview和LayoutManager来实现
- 本文实例为大家分享了java聊天工具的具体制作代码,供大家参考,具体内容如下首先建立一个工程,导入数据库驱动工程图解释一下 entity包是
- 在Web开发过程中离不开数据的交互,这就需要规定交互数据的相关格式,以便数据在客户端与服务器之间进行传递。数据的格式通常有2种:1、xml;
- Spring Boot整合Spring Data JPA1)加入依赖<dependency> <groupId
- 先来看看效果图跳动的小球做这个动画,需掌握: 1、属性动画  
- 为什么需要将webView放在独立进程webView 加载网页的时候可能占用大量内存,导致应用程序OOM。webView 在访问结束的时候可