Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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_Jvm - Fatal编程技术网

在java中,垃圾收集过程是否在固定的时间间隔内完成?

在java中,垃圾收集过程是否在固定的时间间隔内完成?,java,garbage-collection,jvm,Java,Garbage Collection,Jvm,垃圾回收标识不再被任何变量引用的对象,然后回收这些对象占用的内存 我不知道这个过程是在固定的时间间隔内完成的,还是在对象引用计数下降到零时完成的 假设,如果每当对象引用计数下降到零时GC立即工作,则不需要通过调用System.GC请求GC;那么,在这种情况下,这种方法的目的是什么呢?GC既不是在固定的时间间隔内完成的,也不是在对象引用计数降至零时完成的。注意:大多数JVM实现都不使用引用计数算法,所以最后一点是没有意义的 GC运行的时间由垃圾收集算法决定。GC既不是在固定的时间间隔内完成的,也不

垃圾回收标识不再被任何变量引用的对象,然后回收这些对象占用的内存

我不知道这个过程是在固定的时间间隔内完成的,还是在对象引用计数下降到零时完成的


假设,如果每当对象引用计数下降到零时GC立即工作,则不需要通过调用System.GC请求GC;那么,在这种情况下,这种方法的目的是什么呢?

GC既不是在固定的时间间隔内完成的,也不是在对象引用计数降至零时完成的。注意:大多数JVM实现都不使用引用计数算法,所以最后一点是没有意义的


GC运行的时间由垃圾收集算法决定。

GC既不是在固定的时间间隔内完成的,也不是在对象引用计数降至零时完成的。注意:大多数JVM实现都不使用引用计数算法,所以最后一点是没有意义的


GC运行的时间由垃圾收集算法决定。

如果无法从任何活动线程或任何静态引用访问对象,则该对象有资格进行垃圾收集或GC。换句话说,如果对象的所有引用都为空,则可以说该对象有资格进行垃圾收集。循环依赖项不算作引用,因此如果对象A的引用是对象B,而对象B的引用是对象A,并且它们没有任何其他活动引用,那么对象A和对象B都有资格进行垃圾收集。 通常,在以下情况下,对象可以在Java中进行垃圾收集: 1该对象的所有引用都显式设置为null,例如object=null 2对象在块内创建,一旦控件退出该块,引用将超出范围。 3父对象设置为null,如果一个对象持有另一个对象的引用,并且当您将容器对象的引用设置为null时,子对象或包含的对象将自动符合垃圾收集的条件。 4如果一个对象通过WeakHashMap只有活动引用,它将有资格进行垃圾收集


有些方法,如System.gc和Runtime.gc,用于向JVM发送垃圾收集请求,但不能保证垃圾收集会发生。

如果对象无法从任何活动线程或任何静态引用访问到,则该对象有资格进行垃圾收集或gc,换句话说,您可以说该对象如果其所有引用都为null,则有资格进行垃圾收集。循环依赖项不算作引用,因此如果对象A的引用是对象B,而对象B的引用是对象A,并且它们没有任何其他活动引用,那么对象A和对象B都有资格进行垃圾收集。 通常,在以下情况下,对象可以在Java中进行垃圾收集: 1该对象的所有引用都显式设置为null,例如object=null 2对象在块内创建,一旦控件退出该块,引用将超出范围。 3父对象设置为null,如果一个对象持有另一个对象的引用,并且当您将容器对象的引用设置为null时,子对象或包含的对象将自动符合垃圾收集的条件。 4如果一个对象通过WeakHashMap只有活动引用,它将有资格进行垃圾收集


有System.gc和Runtime.gc等方法用于向JVM发送垃圾收集请求,但不能保证垃圾收集会发生。

这是由垃圾收集算法决定的。甚至还有System.gc和Runtime.gc等方法用于向JVM发送垃圾收集请求但不能保证垃圾收集会发生

这是由垃圾收集算法决定的。即使有像System.gc和Runtime.gc这样的方法用于向JVM发送垃圾收集请求,但不能保证垃圾收集会发生

有两个答案:

当垃圾收集器运行时,JVM规范、JLS或任何其他权威Java文档都没有指定它。因此,它是具体实施的

在实践中,通常使用两种不同的策略。对于非并发收集器,当由于没有足够的未分配空间而尝试分配失败时,会触发GC。对于并发收集器,当可用空间量低于预先确定的阈值时,将启动收集。对于热点并发GC,阈值比率是一个可调参数

没有现代的JavaGC使用引用计数

gc的目的是允许应用程序给JVM一个提示,提示现在是运行垃圾收集器的好时机。允许JVM忽略该提示。一般来说,以这种方式触发GC在CPU使用方面效率低下。onl 在生产代码中这样做的一个合理原因是为了避免在高度交互的应用程序中出现GC暂停。当您知道不需要交互时,尝试强制GC;e、 g.在游戏的不同关卡之间。

有两个答案:

当垃圾收集器运行时,JVM规范、JLS或任何其他权威Java文档都没有指定它。因此,它是具体实施的

在实践中,通常使用两种不同的策略。对于非并发收集器,当由于没有足够的未分配空间而尝试分配失败时,会触发GC。对于并发收集器,当可用空间量低于预先确定的阈值时,将启动收集。对于热点并发GC,阈值比率是一个可调参数

没有现代的JavaGC使用引用计数


gc的目的是允许应用程序给JVM一个提示,提示现在是运行垃圾收集器的好时机。允许JVM忽略该提示。一般来说,以这种方式触发GC在CPU使用方面效率低下。在生产代码中这样做的唯一合法原因是为了避免在高度交互的应用程序中出现GC暂停。当您知道不需要交互时,尝试强制GC;e、 g.在游戏的两个关卡之间。

当你调用System.gc时,你对垃圾收集器说要进行清理。问题是GC何时响应您的请求还不清楚。更重要的是,当您调用GC时,它可能根本不运行。在java中,您无法预测GC将如何工作。这就是为什么将清理代码放在对象的finalize方法中被认为是不好的做法。在Java中,引用外对象被自动收集为垃圾。这就是为什么不需要调用System.gc。在特殊情况下,如果可能的话,当您想要运行它时,您可以尝试使用此方法,但不能保证其行为。如上所述。

当您调用System.gc时,您要对垃圾收集器进行清理。问题是GC何时响应您的请求还不清楚。更重要的是,当您调用GC时,它可能根本不运行。在java中,您无法预测GC将如何工作。这就是为什么将清理代码放在对象的finalize方法中被认为是不好的做法。在Java中,引用外对象被自动收集为垃圾。这就是为什么不需要调用System.gc。在特殊情况下,如果可能的话,当您想要运行它时,您可以尝试使用此方法,但不能保证其行为。如上所述。

大多数现代JVM使用stop the world垃圾收集器,即停止程序中所有应用程序线程、执行垃圾收集,然后恢复应用程序线程的垃圾收集器。这意味着在执行垃圾收集之前,应用程序中的所有线程都应该到达一个可以安全停止线程的点。

大多数现代JVM使用停止世界垃圾收集器,即停止程序中所有应用程序线程、执行垃圾收集的垃圾收集器,然后恢复应用程序线程。这意味着在进行垃圾收集之前,应用程序中的所有线程都应该达到可以安全停止线程的点。

我认为这里有一个类似的问题:在正常情况下,不应该通过调用System.gc显式请求垃圾收集。我认为这里有一个类似的问题:在正常情况下,不应该需要通过调用System.gc显式请求垃圾回收。