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

Java 垃圾收集时间与对象数量或对象大小有关吗?

Java 垃圾收集时间与对象数量或对象大小有关吗?,java,memory,garbage-collection,heap,heap-memory,Java,Memory,Garbage Collection,Heap,Heap Memory,我遇到了垃圾收集缓慢的问题。显然,堆中的对象越多(其他所有对象都相等)将导致更长的GC时间,而堆中的对象越大,GC时间就越长 然而,我想知道对象大小和对象数量之间的权衡。例如,比较两组总兆字节相同的对象,其中一组有1000000个对象,另一组有5个对象,这对GC来说更快 它与对象的数量、复杂性和引用的数量有关。基本上,访问和标记“可访问”的所有内容需要多长时间 这是因为它做了一个标记,从根移动到尖端,并标记所有可以到达的地方。其他所有内容都标记为可用内存,而不管大小 总体GC性能 正如@Nick

我遇到了垃圾收集缓慢的问题。显然,堆中的对象越多(其他所有对象都相等)将导致更长的GC时间,而堆中的对象越大,GC时间就越长


然而,我想知道对象大小和对象数量之间的权衡。例如,比较两组总兆字节相同的对象,其中一组有1000000个对象,另一组有5个对象,这对GC来说更快

它与对象的数量、复杂性和引用的数量有关。基本上,访问和标记“可访问”的所有内容需要多长时间

这是因为它做了一个标记,从根移动到尖端,并标记所有可以到达的地方。其他所有内容都标记为可用内存,而不管大小

总体GC性能


正如@Nick Holt在评论中提到的,较大的对象会更频繁地进行垃圾收集,因为它们会更快地填充堆,从而影响GC性能。清除一个100Gig的物体应该仍然比清除100Gig的10Meg物体要快。

有次要和主要的地面军事系统。次要速度取决于新尺寸主要取决于旧尺寸和其中对象的数量。至于对象大小,我假设GC在处理大型未引用对象时的速度可能更高,因为当GC遇到未引用对象时,它只是跳过它

对象大小对GC性能影响很小,而对象数量影响很大。因此,对于较大的对象,如果这些对象的内存占用是固定的,那么您可以期望获得更好的性能。

好的,因此GC的时间与对象的数量和大小呈正相关,如果您将要删除的对象的聚合大小保持为常量,GC的时间在对象数量上仍然是一个单调递增的函数吗?不是对象的大小,不是。只是对象的数量和引用的数量。较大的对象不是更快地填满堆,意味着GC发生得更频繁吗?@NickHolt你拿错了东西常量:OP的问题是,对于给定的总分配内存,内存被分成几个对象和许多对象之间有什么区别呢?@MarkoTopolnik同意,我想强调的是有一个折衷,对象和堆大小应该一起考虑:-)非常清楚。非常感谢。我只是想知道我听说过有人说非常大的堆大小会导致长GC。即使我们只有一个大型对象要GC,这是真的吗?一个大型对象不现实-大型堆允许在GC之间创建更多对象,因此这些GC通常较慢,因为它们有更多的工作要做。@NickHolt现实与否,如果您真的在大型堆上只有一个大型对象,这绝对是微不足道的。一个实际的问题是,由于将对象划分为几代和其他问题,几乎不可能分配像堆那么大的对象。@MarkoTopolnik是的,我是在回应我上面的评论,关于为什么大堆通常会导致更长的GC。@NickHolt Fair,但我觉得OP有一个非常精确的问题要问:他想把对象计数的影响和大堆的影响分开。这实际上是一个很好的问题,可能有一些原因可以解释为什么具有相同对象计数的较大堆至少需要更长的时间才能完成GC。