栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

什么时候以及如何在Java中收集类垃圾?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

什么时候以及如何在Java中收集类垃圾?

没有任何引用时,可以对Java中的类进行垃圾回收。在大多数简单的设置中,这永远不会发生,但是在某些情况下可能会发生。

有很多方法可以使类可达,从而阻止其符合GC的资格:

  • 该类对象仍然可以访问。
  • Class
    表示类的对象仍然可以访问
  • ClassLoader
    这加载的类仍可达
  • ClassLoader
    仍然可以加载由加载的其他类

如果 没有 那些都是真的,那么

ClassLoader
它加载,并且所有的类都是符合GC。

这是一个结构化的示例(充满了不良习惯!),该示例可以证明行为:

GCTester.class
在目录(不是包!)中创建一个字节码文件
x
。它的源代码是:

public class GCTester {  public static final GCTester INSTANCE=new GCTester();  private GCTester() {    System.out.println(this + " created");  }  public void finalize() {    System.out.println(this + " finalized");  }}

然后

TestMe
在的父目录中创建一个类
x

import java.io.File;import java.net.URL;import java.net.URLClassLoader;import java.lang.reflect.Field;public class TestMe {  public static void main(String[] args) throws Exception {    System.out.println("in main");    testGetObject();    System.out.println("Second gc() call (in main)");    System.gc();    Thread.sleep(1000);    System.out.println("End of main");  }  public static void testGetObject() throws Exception {    System.out.println("Creating ClassLoader");    ClassLoader cl = new URLClassLoader(new URL[] {new File("./x").toURI().toURL()});    System.out.println("Loading Class");    Class<?> clazz = cl.loadClass("GCTester");    System.out.println("Getting static field");    Field field = clazz.getField("INSTANCE");    System.out.println("Reading static value");    Object object = field.get(null);    System.out.println("Got value: " + object);    System.out.println("First gc() call");    System.gc();    Thread.sleep(1000);  }}

运行

TestMe
将产生以下(或类似的)输出:

在主要创建ClassLoader装载类获取静态场读取静态值创建GCTester @ 1feed786获得值:GCTester @ 1feed786第一次gc()调用第二次gc()调用(主要)GCTester @ 1feed786最终确定主端

在倒数第二行中,我们看到

GCTester
实例已完成,这仅意味着该类(和
ClassLoader
)可以进行垃圾收集。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569185.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号