我的最终目标是在JVM加载类后能够重新加载这些类。
阅读了以下答案Unloading classes in java?后,我一直在尝试实现自己的Class-Loader,它本身为每个加载的类创建一个不同的Class-Loader实例(与其自身相同类型的实例)。
因此,结果是每个Class-Loader对应一个类。
目的是能够进行垃圾回收,即所有实例,然后卸载其类加载器,并能够从其字节重新加载相同的类。
问题是-我可以看到使用finalize()方法垃圾收集我的类实例,但我无法使我的Class-Loader卸载或垃圾收集。
是否有任何代码示例,简单的测试,展示如何完成此操作?
谢谢,任何帮助将不胜感激。
编辑:
为了更清晰,我对通过“new()”操作数实例化新对象的代码示例感兴趣,而类加载器在主函数中没有显式重新加载类,但在调用下一个“new()”后会重新加载。
阅读了以下答案Unloading classes in java?后,我一直在尝试实现自己的Class-Loader,它本身为每个加载的类创建一个不同的Class-Loader实例(与其自身相同类型的实例)。
因此,结果是每个Class-Loader对应一个类。
目的是能够进行垃圾回收,即所有实例,然后卸载其类加载器,并能够从其字节重新加载相同的类。
问题是-我可以看到使用finalize()方法垃圾收集我的类实例,但我无法使我的Class-Loader卸载或垃圾收集。
是否有任何代码示例,简单的测试,展示如何完成此操作?
谢谢,任何帮助将不胜感激。
编辑:
为了更清晰,我对通过“new()”操作数实例化新对象的代码示例感兴趣,而类加载器在主函数中没有显式重新加载类,但在调用下一个“new()”后会重新加载。
ClassLoader
加载类时,您将获得一个Class
对象。无法使用new
运算符。使用new
意味着您的代码已链接到由new
使用的类,因此,在包含new
表达式的代码仍然活动时,该类无法被垃圾回收。在这一点上,您必须使用反射,例如在Class
上调用newInstance()
。当然,动态加载的代码本身可能会使用new
来实例化其自己范围内的类。 - Holger