查询垃圾收集器行为

时间:2013-08-27 12:02:20

标签: java garbage-collection

正如我在Sun Memory管理白皮书中所读到的那样:

When stop-the-world garbage collection is performed, execution of the application is completely
suspended during the collection

因此,如果在垃圾收集器运行时发生请求,那么应用程序如何处理?如果垃圾收集器耗时太长,应用程序会抛出异常吗?我没有遇到过这样的问题,但想知道这是可能的,会抛出什么异常?

2 个答案:

答案 0 :(得分:1)

所有(几乎)Java垃圾收集器都有某种Stop-the-world阶段,其中所有Java线程都被挂起,等待独占系统操作完成。此状态有时称为安全点

现代垃圾收集器与应用程序线程同时运行,这意味着垃圾收集器与应用程序同时执行其工作。在垃圾收集器进程中,存在需要独占访问内存的阶段,应用程序线程进入此安全点状态。

如果垃圾回收器无法恢复足够的内存以满足应用程序的分配要求,则抛出异常。

摆脱世界末日垃圾收集的一个替代方案是使用Azul系统的C4收集器来使用Zing JVM。该实现具有低暂停方法,根本没有停止世界的集合。相反,它使用的是并发压缩方法,没有世界末日。

答案 1 :(得分:0)

此垃圾收集器不再使用,取而代之的是更好的垃圾收集器。

stop-the-world垃圾收集器确实停止了整个应用程序(所有线程)并清理了堆。

当垃圾收集器耗时太长(几乎从未发生过)时,会抛出Error

网络套接字上的发送流量在收集器运行时进行缓冲。