3

正如我在 Sun 内存管理白皮书中所读到的:

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

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

4

2 回答 2

1

所有(几乎)Java 垃圾收集器都有某种“停止世界”阶段,其中所有 Java 线程都被挂起,等待独占系统操作完成。这种状态有时被称为安全点

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

如果垃圾收集器无法恢复足够的内存来满足应用程序的分配需求,则会引发异常。

摆脱 stop-the-world 垃圾收集的一种替代方法是使用来自 Azul 系统的 C4 收集器的 Zing JVM。该实现具有低暂停方法,根本没有停止世界的集合。相反,它使用了一种没有停止世界阶段的并发压缩方法。

于 2013-08-27T13:12:23.460 回答
0

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

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

当垃圾收集器花费太长时间(几乎从未发生过)时,Error就会抛出 an 。

网络套接字上的传入流量在收集器运行期间被缓冲。

于 2013-08-27T12:06:55.587 回答