Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于垃圾收集器行为的查询_Java_Garbage Collection - Fatal编程技术网

Java 关于垃圾收集器行为的查询

Java 关于垃圾收集器行为的查询,java,garbage-collection,Java,Garbage Collection,正如我在Sun内存管理白皮书中所读到的: When stop-the-world garbage collection is performed, execution of the application is completely suspended during the collection 因此,如果在垃圾收集器运行时发生请求,那么应用程序将如何处理该请求?如果垃圾收集器花费的时间太长,应用程序是否会引发异常?我没有遇到过这样的问题,但想知道这是否可能以及引发了什么异常?此垃圾收集器不再

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

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

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

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

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

当垃圾收集器花费的时间太长(这几乎从未发生过)时,就会抛出
错误

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

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

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

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


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

我认为不会引发任何异常。但是如果网络操作正在进行,则如果需要更长的时间,肯定会出现某种网络超时。那么handledAn异常是如何抛出的呢?我不知道!如果任何垃圾收集器不能及时完成其任务,将抛出
OutOfMemoryError
。@Uwe Plonus:如果收集器是停止世界收集器,则不管需要多长时间,您不会得到OutOfMemoryError,因为程序已停止,并且没有进行分配。如果垃圾收集完成运行但无法回收任何可用空间,则可能会出现OutOfMemoryError。@davmac我已经有几个
OutOfMemoryError
s不是由耗尽的堆空间引起的,例如,
java.lang.OutOfMemoryError:超出了GC开销限制。
如果java 7中的默认垃圾回收器花费太多时间,就会抛出该错误。@UwePlonus我认为我们都有一点错误。如果垃圾收集花费很长时间,但只有当它无法回收足够的空间时,才会出现OutOfMemoryError。例如,当我说如果不能回收任何空间,你就会得到错误。一个线程可以在安全点之间运行多长时间?如果线程X位于安全点之间,并且需要进行垃圾收集,那么是否需要停止所有其他线程,直到X到达下一个安全点为止,而不管垃圾收集需要多长时间?