代码之家  ›  专栏  ›  技术社区  ›  rwallace

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

  •  1
  • rwallace  · 技术社区  · 15 年前

    我正在寻找在运行时生成Java字节码的可能性(希望直接在内存中而不是通过类文件,虽然我想这不会对我的问题产生影响)。

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

    为了澄清这一点,我当然不会为普通的数据处理场景费心。但是考虑一下基因编程:可能有数十亿个小程序被生成并运行,以供数万亿次执行;在这种情况下,尽可能快地运行是值得的,释放不再使用的代码是很重要的。我想做一些更复杂的事情,但它与基因编程有相似之处。

    2 回复  |  直到 15 年前
        1
  •  4
  •   kdgregory    15 年前

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

    不过,我想知道这是否真的会成为一个问题?你计划开设多少个班级,他们的规模有多大,他们的寿命有多长?如果你有很多大类(比如50K字节码或更多),它们的生存时间很短,那么清理它们是有意义的。否则,就没那么多了。

    另外,为什么要创建类?您是否可以在JVM中使用脚本语言(如Rhino)来完成这些工作?还是一个自制的翻译?如果是,那么这将解决没有代码的类管理问题。

        2
  •  0
  •   Nick Holt    15 年前

    如果你是说全班都能 空载 由垃圾收集器收集,然后不,它没有。

    但是,您可以通过编写自定义类加载器来实现这一点。