前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >java 怎样卸载一个类_Java 动态卸载类[通俗易懂]

java 怎样卸载一个类_Java 动态卸载类[通俗易懂]

作者头像
全栈程序员站长
发布2022-08-30 20:54:13
发布2022-08-30 20:54:13
1.9K0
举报

大家好,又见面了,我是你们的朋友全栈君。

通过反射,我们可以动态的将类加载到方法区中,但是卸载这个类,却有着比较严苛的条件

1. 该类所有的实例都已经被GC,也就是JVM中不存在该Class的任何实例。

2. 加载该类的ClassLoader已经被GC。

3. 该类的java.lang.Class 对象没有在任何地方被引用,如不能在任何地方通过反射访问该类的方法.

public static void main(String[] args) throws InterruptedException {

// 等待两秒,让系统加载完所有的类

Thread.sleep(2000);

try {

System.out.println(“Loading…”);

// 利用反射,加载ComplexClass类

URLClassLoader loader = new URLClassLoader(new URL[]{new URL(“file:/Users/wuchen/Desktop/”)});

loader.loadClass(“com.company.wuchen.demo.ComplexClass”);

// 将加载这个类的URLClassLoader的引用置为null,以便让这个类释放

loader = null;

// 启动垃圾回收(JVM虚拟机规范中明确说明,这个方法并不能保证垃圾回收一定执行,但是在此处的确有执行)

System.gc();

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

在虚拟机的参数上添加-XX:+TraceClassLoading -XX:+TraceClassUnloading,这两个参数告诉虚拟机,需要打印出加载和卸载类的信息,实际运行的结果如下

这个类先是被加载,然后被卸载了

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/144678.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档