是否可以更改垃圾收集器线程的优先级?
Java垃圾收集器以优先级1运行,因此无法保证System.gc()在被调用时实际执行。
有没有办法改变它的优先级? 这将使我能够运行,如果我想。
垃圾收集器是一个独立的线程(由Tom Hawtin在评论中提醒,甚至不一定是单个线程)并且具有由Java虚拟机决定的优先级。 这意味着您无法强制进行垃圾回收。 调用System.gc()
告诉运行时环境“现在”可能是运行GC的好时机,但实际上不能保证垃圾收集立即完成。
即使您将线程优先级提高到11 System.gc也不能保证任何内容。 您可以确定的是,如果Java需要GC,它会抛出内存不足exception。
GC将根据需要运行。 您不需要手动调用它。 如果你不喜欢它运行时你可以用命令行参数控制它。
如果您认为GC的行为有问题,您应该尝试修复原因而不是尝试编写自己的工作。
总之,您应该告诉我们您关注的真正原因是什么,以便我们能够解决这个问题。
创建线程时,它会inheritance创建它的线程的优先级。 可以使用调整线程的优先级
public final void setPriority(int newPriority)
问题是线程没有“运行”垃圾收集器。 垃圾收集器由VM运行(当Java想要或处于“好心情…… :)”时。
编辑:GC不是一个线程,而是一个运行时线程的方法。 您可以更改运行时线程的优先级,但这对GC没有影响。 调用GC的线程是VM的一个线程,不在API的范围内,因此您无法更改其优先级。
所以,我真的认为你不能确定它的优先级。