正如我在Sun Memory管理白皮书中所读到的那样:
When stop-the-world garbage collection is performed, execution of the application is completely
suspended during the collection
因此,如果在垃圾收集器运行时发生请求,那么应用程序如何处理?如果垃圾收集器耗时太长,应用程序会抛出异常吗?我没有遇到过这样的问题,但想知道这是可能的,会抛出什么异常?
答案 0 :(得分:1)
所有(几乎)Java垃圾收集器都有某种Stop-the-world阶段,其中所有Java线程都被挂起,等待独占系统操作完成。此状态有时称为安全点。
现代垃圾收集器与应用程序线程同时运行,这意味着垃圾收集器与应用程序同时执行其工作。在垃圾收集器进程中,存在需要独占访问内存的阶段,应用程序线程进入此安全点状态。
如果垃圾回收器无法恢复足够的内存以满足应用程序的分配要求,则抛出异常。
摆脱世界末日垃圾收集的一个替代方案是使用Azul系统的C4收集器来使用Zing JVM。该实现具有低暂停方法,根本没有停止世界的集合。相反,它使用的是并发压缩方法,没有世界末日。
答案 1 :(得分:0)
此垃圾收集器不再使用,取而代之的是更好的垃圾收集器。
stop-the-world
垃圾收集器确实停止了整个应用程序(所有线程)并清理了堆。
当垃圾收集器耗时太长(几乎从未发生过)时,会抛出Error
。
网络套接字上的发送流量在收集器运行时进行缓冲。