关于垃圾收集行为查询
正如我在Sun内存管理白皮书阅读:关于垃圾收集行为查询
When stop-the-world garbage collection is performed, execution of the application is completely
suspended during the collection
所以,如果一个请求,而垃圾收集器运行,那么它是如何应用程序处理的情况发生?如果垃圾收集器花费太长时间,应用程序会抛出异常?我没有遇到这样的问题,但想知道这是可能的,并抛出什么异常?
这个垃圾回收器不再被使用,并被更好的垃圾回收器取代。
stop-the-world
垃圾回收器确实停止了完整的应用程序(所有线程)并清理了堆。
当垃圾收集器花费太长时间(几乎从不发生),则会抛出一个Error
。
收集器运行时缓冲网络套接字上的流量。
所有(几乎)Java垃圾收集器都有某种停止世界阶段,其中所有Java线程都挂起,等待独占系统操作完成。该状态有时被称为安全点。
现代垃圾收集器与应用程序线程同时运行,这意味着垃圾收集器与应用程序同时执行其工作。在垃圾收集器进程期间,需要独占访问内存的阶段,应用程序线程进入此状态。
如果垃圾收集器无法恢复足够的内存以满足应用程序的分配需求,则会引发异常。
摆脱停止世界垃圾回收的一种替代方法是使用Azul系统中的C4收集器进行Zing JVM。这种实现具有很低的停顿方式,根本没有停止世界的收藏。相反,它使用的是并行压缩方法,没有停止世界阶段。
线程在安全点之间可以运行多长时间?如果线程X位于安全点之间,并且需要垃圾回收,那么只要X使其到达下一个安全点,就会要求所有其他线程停止运行,无论收集的时间长短如何? – supercat
我不认为会有任何异常将被抛出。 – codeMan
但是如果网络操作正在进行,那么确实需要更长时间才会出现某种网络超时。那么如何处理 – DevZer0