Java垃圾收集运行时生成的代码

时间:2009-07-15 11:30:04

标签: java garbage-collection code-generation

我正在考虑在运行时生成Java字节代码的可能性(希望直接在内存中而不是通过类文件,但我想这对我的问题没有任何影响)。

我明白这可以做到,问题是,垃圾收集器是否清除了不再使用的代码?我记得几年前看到它声称它没有,但我现在找不到任何关于这个主题的参考。

为了澄清这个目的,我当然不会为普通的数据处理场景而烦恼。但是考虑遗传编程:潜在的数十亿个小程序产生并运行数万亿次执行;在这种情况下,值得尝试尽可能快地运行,并且释放不再使用的代码非常重要。我正在尝试做一些更复杂的事情,但它与遗传编程有相似之处。

2 个答案:

答案 0 :(得分:4)

类与加载它们的ClassLoader绑定。要使JVM收集未使用的类,必须清除对类加载器的所有引用。这就是应用程序服务器如何使用“热部署”,如果您不熟悉类加载器,那么查看JBoss或Tomcat实现可能是有益的(我没有看过,所以不能指向它们)

但是,我想知道这是否真的会成为一个问题?你计划创建多少课程,他们将有多大,以及他们将活多久?如果你有很多大类(比如50k字节码或更多),并且它们会活很短的时间,那么清理它们是有意义的。否则,不是那么多。

另外,你为什么要创建课程?是否可以使用JVM中的脚本语言(例如Rhino)进行操作?还是家里翻译?如果是,则可以在没有代码的情况下解决您的班级管理问题。

答案 1 :(得分:0)

如果你的意思是垃圾收集器让类卸载,那么它就不会。

但是,您可以通过编写自定义类加载器来实现此目的。