回答
垃圾收集器是一个独立的线程(由Tom Hawtin在注释中提醒,甚至不一定是单个线程),它的优先级由Java虚拟机决定。这意味着你不能强制垃圾收集。调用System.gc()
告诉运行时环境“现在”可能是运行GC的好时机,但垃圾收集实际上不能保证立即完成。
不错的简短事实。 – BalusC 2009-12-09 17:37:58
它甚至不一定是一个单一的线程。 – 2009-12-09 17:38:49
感谢您的满意答案帕斯卡尔。你只是为了点。 – DKSRathore 2009-12-09 17:42:44
即使您将线程优先级提高到 System.gc不保证任何内容。所有你可以确定的是,如果Java需要GC,它会引发内存不足异常。
否这不是必需的。如果您已经调用System.gc,则在空闲时间运行。 – DKSRathore 2009-12-09 17:26:50
因为如果是这样的话,所有未使用的对象都会留在JVM中很长一段时间,直到出现OOM条件?在我的系统上,它有8GB的JVM,它在达到6GB之后从未丰富7GB,当我的程序处于运行状态时,它将达到5GB,然后是6GB,等等。在你的情况下,它应该已经达到8GB,然后回到5 GB – DKSRathore 2009-12-09 17:31:57
我不确定你的意思是什么。 Anyhoo - System.gc不能保证。完全一样。我不确定VM规格是否需要GC线程。只是Java在投掷OOM之前会给它一个很好的去处。 最后一点,Sun VM上的System.gc确实(或确实)完成了GC扫描,就在当前线程中。它不必这样做。它什么都不能做,仍然满足它的要求。 – 2009-12-09 17:34:55
创建线程时,它会继承创建线程的优先级。线程的优先级可以通过使用
public final void setPriority(int newPriority)
调整问题是一个线程不“跑”的垃圾收集器。 垃圾收集器由VM运行(当Java需要或处于“好心情:)”时)。
编辑: GC不是一个线程,而是一个运行时线程的方法。您可以更改运行时线程的优先级,但这不会影响GC。调用GC的线程是虚拟机的线程,超出了API的范围,因此您无法更改其优先级。
所以,我真的不认为你可以设置它的优先级。
从gc的javadoc粘贴() gc代表“垃圾回收器”。即使未明确调用gc方法,虚拟机也会根据需要在单独的线程中自动执行此回收过程。 – DKSRathore 2009-12-09 17:33:39
但是...取决于JVM实现,收集器可能使用多个线程,或者根本不使用线程。所以这个答案对我来说是正确的。 – 2009-12-09 17:45:07
GC将根据需要运行。你不需要手动调用它。如果你不喜欢什么时候运行,你可以用命令行参数来控制它。
如果您认为GC的行为有问题,您应该尝试修复原因而不是尝试编写自己的工作。
总之,你应该告诉我们你担心的真正原因是什么,所以我们可以解决这个问题。
- 1. Java垃圾回收线程的优先级
- 2. Java线程垃圾收集与否
- 3. 更改线程优先级
- 4. 垃圾收集器如何确定对象是否是垃圾?
- 5. 守护线程垃圾收集器的父线程是什么?
- 6. 是否可以更改Windows服务器的I/O优先级?
- 7. 垃圾收集器是否有配置?
- 8. 垃圾收集器
- 9. 借助GCViewer优化垃圾收集器
- 10. Node.js的垃圾收集器
- 11. 是否可以设置主线程的优先级?
- 12. java.io.serializable是否可以防止垃圾收集?
- 13. 垃圾收集是否发生在流程级别或应用程序级别?
- 14. 更改线程优先级ERROR_INVALID_HANDLE
- 15. java垃圾收集是否安全地清除垃圾数据?
- 16. 垃圾收集 - 是否需要?
- 17. 垃圾收集是否影响堆栈?
- 18. 是否收集了客观C垃圾?
- 19. GC是否从Metaspace收集垃圾?
- 20. Renderscript和垃圾收集器
- 21. .NET垃圾收集器
- 22. 垃圾收集器Flash Player
- 23. 垃圾收集器vs池
- 24. 垃圾收集器asp.net
- 25. Jruby,垃圾收集器,Redis
- 26. 活物是垃圾收集?
- 27. Python线程垃圾回收
- 28. 垃圾收集器可以用于哪种应用程序?
- 29. 垃圾收集器是否可以通过用其他语言编写的函数留下“垃圾”?
- 30. 线程没有垃圾收集/线程池线程/ C#/ .net
线程优先级真的是它可能无法运行的唯一原因吗? – 2009-12-09 17:24:11
是的,我认为是。 – DKSRathore 2009-12-09 17:25:07
你为什么要强迫它运行? – 2009-12-09 17:25:26