Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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 小GC是什么时候触发的?_Java_Garbage Collection_Jvm - Fatal编程技术网

Java 小GC是什么时候触发的?

Java 小GC是什么时候触发的?,java,garbage-collection,jvm,Java,Garbage Collection,Jvm,我在谷歌上搜索,发现大多数文章都这么说 “当JVM无法为新对象分配空间时,总是会触发次要GC,” 但是从visualVM中,我发现小gc发生得非常频繁。我可以看到伊甸园空间将被重新调整,然后其中的非空空间将被清除。 所以我认为当伊甸园世代满的时候,小gc不会被触发。 新对象的分配发生在伊甸园区域;当伊甸园区域已满时,幸存者被复制到幸存者空间,其余的伊甸园空间被丢弃。当幸存者空间已满时,对象将被复制到另一个幸存者空间(S0S1),并且在一定数量的复制(3)后,继续的幸存者将被复制到堆中。在分配对象

我在谷歌上搜索,发现大多数文章都这么说

“当JVM无法为新对象分配空间时,总是会触发次要GC,”

但是从visualVM中,我发现小gc发生得非常频繁。我可以看到伊甸园空间将被重新调整,然后其中的非空空间将被清除。 所以我认为当伊甸园世代满的时候,小gc不会被触发。

新对象的分配发生在伊甸园区域;当伊甸园区域已满时,幸存者被复制到幸存者空间,其余的伊甸园空间被丢弃。当幸存者空间已满时,对象将被复制到另一个幸存者空间(S0S1),并且在一定数量的复制(3)后,继续的幸存者将被复制到堆中。在分配对象时,这种情况随时都会发生。主要GC是当对象的完整堆被扫描时,当没有更多空间将幸存者复制到主堆时触发。

新对象的分配发生在Eden区域;当伊甸园区域已满时,幸存者被复制到幸存者空间,其余的伊甸园空间被丢弃。当幸存者空间已满时,对象将被复制到另一个幸存者空间(S0S1),并且在一定数量的复制(3)后,继续的幸存者将被复制到堆中。在分配对象时,这种情况随时都会发生。主要GC是当对象的完整堆被扫描时,当没有更多空间将幸存者复制到主堆时触发。

根据您所附的图表,以下是次要GC的原因:

1.在图中,元空间在很长一段时间内是高的,因此这些导致完全GC,而intern导致次要GC

2.还有一点是,不要看左边的图,因为已经分配、提交、使用了内存,我们不能确切地说GC发生的时间,所以请看右边的图,如果Eden空间中提交的内存等于使用的内存,则会发生次要GC


3.因此,最终由于1和2个原因交替出现次要GC。

根据您所附的图表,以下是次要GC的原因:

1.在图中,元空间在很长一段时间内是高的,因此这些导致完全GC,而intern导致次要GC

2.还有一点是,不要看左边的图,因为已经分配、提交、使用了内存,我们不能确切地说GC发生的时间,所以请看右边的图,如果Eden空间中提交的内存等于使用的内存,则会发生次要GC


3.因此,由于1和2个原因,最终出现次要GC。

可能重复,但我问的是次要GC何时触发,而不是完全GC。可能重复,但我问的是次要GC何时触发,而不是完全GC。