是否可以更改垃圾收集器线程的优先级?

时间:2009-12-09 17:20:35

标签: java garbage-collection

Java垃圾收集器以优先级1运行,因此无法保证System.gc()在调用时实际执行。

有没有办法改变它的优先顺序?如果我愿意,这将使我能够跑。

4 个答案:

答案 0 :(得分:7)

垃圾收集器是一个独立的线程(由Tom Hawtin在注释中提醒,甚至不一定是单个线程),并且具有由Java虚拟机决定的优先级。这意味着您无法强制进行垃圾回收。调用System.gc()告诉运行时环境“现在”可能是运行GC的好时机,但实际上不能保证垃圾收集立即完成。

答案 1 :(得分:4)

即使您将线程优先级提高到 11 ,System.gc也不能保证任何内容。你可以肯定的是,如果Java需要GC,它会抛出内存不足的异常。

答案 2 :(得分:1)

GC将根据需要运行。您不需要手动调用它。如果您在运行时不喜欢,可以使用命令行参数控制它。

如果您认为GC的行为有问题,您应该尝试解决原因而不是尝试编写自己的工作。

总之,您应该告诉我们您关注的真正原因是什么,以便我们能够解决这个问题。

答案 3 :(得分:0)

创建线程时,它会继承创建它的线程的优先级。可以使用

调整线程的优先级

public final void setPriority(int newPriority)

问题是线程没有“运行”垃圾收集器。 垃圾收集器由VM运行(当Java想要或处于“好心情...... :)”时。)

编辑: GC不是线程,而是Runtime线程的方法。您可以更改运行时线程的优先级,但这对GC没有影响。调用GC的线程是VM的一个线程,并且不在API的范围内,因此您无法更改其优先级。

所以,我认为你不能确定它的优先级。

相关问题