Java垃圾收集器以优先级1运行,因此无法保证System.gc()在调用时实际执行。
有没有办法改变它的优先顺序?如果我愿意,这将使我能够跑。
答案 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的范围内,因此您无法更改其优先级。
所以,我认为你不能确定它的优先级。