Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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 GCs开销:是否有10mb或10gb的*引用*对象有关系?_Java_Performance_Garbage Collection_Nio - Fatal编程技术网

Java GCs开销:是否有10mb或10gb的*引用*对象有关系?

Java GCs开销:是否有10mb或10gb的*引用*对象有关系?,java,performance,garbage-collection,nio,Java,Performance,Garbage Collection,Nio,GC必须检查并找出可以收集哪些对象。我的问题是,要检查的对象太多是否会导致GC开销,或者GC是否足够聪明,可以避免遍历所有对象以找出哪个对象不再被引用?是的,这与您拥有的对象数量有关。至于这些对象的大小,这可能也很重要:如果压缩收集器需要压缩10GB而不是10MB的内容,那么它将有更多的工作要做 话虽如此,现代垃圾收集器非常复杂(它们在多个堆上操作,在后台做事情,可以使用多个内核等)。它们也是高度可配置的。此外,典型的JVM配备了多个垃圾收集器 因此,很难对这样的一般问题给出有意义、准确的答案。

GC必须检查并找出可以收集哪些对象。我的问题是,要检查的对象太多是否会导致GC开销,或者GC是否足够聪明,可以避免遍历所有对象以找出哪个对象不再被引用?

是的,这与您拥有的对象数量有关。至于这些对象的大小,这可能也很重要:如果压缩收集器需要压缩10GB而不是10MB的内容,那么它将有更多的工作要做

话虽如此,现代垃圾收集器非常复杂(它们在多个堆上操作,在后台做事情,可以使用多个内核等)。它们也是高度可配置的。此外,典型的JVM配备了多个垃圾收集器


因此,很难对这样的一般问题给出有意义、准确的答案。

它必须遍历所有活动对象,以确定是否仍在使用某个对象。G1收集器有1MB巨型对象(它知道1MB内的所有引用),但性能基本相同


当您进入多GB解决方案时,一种选择是使用您自己管理的堆外内存。或者您可以使用类似的解决方案,它可以处理数十GB的堆,而不会出现明显的暂停。

这取决于使用的是哪种GC算法,在标记扫描的情况下,这很重要,因为标记扫描需要使用枚举标识GC的根

优化这种东西的一个方法是使用的概念。(参见第4节)。显然,Java从1.2开始就有了代代相传的集合

这意味着通常较新的物体可能会更快地死亡,称为“婴儿死亡率”。这些较新的对象被放入一个收集更积极的世代。如果一个对象已经存在了一个小时,那么它很可能还存在5分钟左右,并且被放入比新对象收集频率更低的一代中。如果一个对象在收集频率较高的区域存活一段时间,它将被提升到收集频率较低的一代


这使您无法查看每次扫描的所有活动对象。

您是否对并发位运行过任何实验。;)我只能说这要花“真正的”钱