我们可以在java中定制垃圾收集器吗?

时间:2010-01-25 18:35:51

标签: java garbage-collection

我们知道java的垃圾收集器是一个低优先级的线程。在java中,我们可以创建任何具有高优先级的线程。因此可以拥有我们自己的具有可变优先级的自定义垃圾收集器线程(我们可以根据内存管理级别进行设置)。

有人试过吗。如果是,你可以分享一些关于如何及其逻辑的知识吗? 感谢

4 个答案:

答案 0 :(得分:10)

Java的垃圾收集器不是“低优先级线程”。例如,垃圾收集通常并行使用多个线程。而且,当内存不足时,垃圾收集可以抢占任何应用程序线程。

我建议研究Garbage Collection Tuning guide以确定最适合应用程序的垃圾收集器类型,以及如何调整其参数。

答案 1 :(得分:3)

Java中的垃圾收集已经过多年的精心调整。有可能但你不太可能做一些非常特殊的事情,在这方面有特殊需求。

但我认为更有可能的是,您认为垃圾收集器遇到的任何问题都是您的应用程序中存在的问题。更多猜测:

  • 您不必要地创建和丢弃了大量对象。
  • 你有内存泄漏。
  • 您的应用程序中存在性能问题。
  • 你的表现期望不可能。

答案 2 :(得分:2)

是的,你可以,但它需要你做一些相当硬的核心JVM工作,因为你不能从正在运行的Java程序中做到这一点。最简单的入门方法可能是使用Jikes RVM,因为它是用Java编写的(IBM项目已经开源)。

http://jikesrvm.org/

玩得开心,但期待一场艰苦的战斗:)

答案 3 :(得分:0)

我相信您必须部署自己的JRE / JVM。无法关闭Java中的默认垃圾回收。

Java 7将使用全新的GC,因此应该可以将它们交换出来。