一个类如何以及何时解析对另一个类的任何引用?

时间:2015-12-08 16:48:30

标签: java plugins classloader

我有一些关于如何检查JVM处理类的引用的问题。我发现文档稍微不清楚下面的场景如何在幕后工作。

想象一下,我有这两个类:

class AlphaClass {

    public AlphaClass {
    }

    public int someProcess() {
        return int result = BetaClass.someStaticProcess();
    }
}

class BetaClass {

    public BetaClass {
    }

    public static int someStaticProcess() {
        return 1;
    }
}

它们都由自定义ClassLoader加载。因此,我的AlphaClass由ClassLoaderA加载,BetaClass由ClassLoaderB加载。这两个加载器的父级是AppClassLoader。

现在我将这两个类加载到JVM中,我选择实例化一个AlphaClass类型的对象。在我实例化了AlphaClass对象之后,我选择调用方法someProcess()。它工作,并返回1.在此之后的某个时刻,我通过销毁ClassLoaderB卸载BetaClass,为了参数,我们将假设它立即被垃圾收集。

经过一段时间后,我创建了一个新的类加载器ClassLoaderC,其父级是AppClassLoader。这个ClassLoaderC将加载BetaClass类。完成此操作后,我之前实例化的相同AlphaClass对象是否可以运行其someProcess()方法?

如果这不起作用,为什么不呢?有什么方法可以解决这个问题?

编辑:为了总结我的例子和问题,现在你已经阅读了我想要完成的一些背景知识。是否通过卸载和重新加载BetaClass来破坏对BetaClass中的静态方法的引用,还是在加载/卸载后它仍然可以工作?

0 个答案:

没有答案