gpt4 book ai didi

Java varargs 分配数组对象?

转载 作者:行者123 更新时间:2023-12-01 07:39:14 26 4
gpt4 key购买 nike

哇!我刚刚意识到 Java 中的 varargs 方法在调用它们时会导致数组被分配。不知道为什么我会期望有什么不同,但是是否应该对数组进行某种池化?至少对于最初的 0 到 8 尺寸? Java 中是否有任何解决方法可以使用可变参数而不导致每次调用都分配数组?

编辑:请理解,将内存泄漏到 GC 只是一种不需要的开销/延迟。这不是像某些评论所暗示的那样是一个错误。仅仅因为 Java 有 GC,并不意味着您可以随意创建大量垃圾。

最佳答案

参见EnumSet示例。可变参数方法

of(E first, E... rest) 

重载了

of(E e1, E e2) 
of(E e1, E e2, E e3)
of(E e1, E e2, E e3, E e4)
of(E e1, E e2, E e3, E e4, E e5)

如果 args 为 5 或更少,则避免创建 vararg 数组。 (EnumSet 在这里可能太过分了)

我认为这并不是真正的 GC 问题。创建的数组很快就会被解引用,这样的死年轻垃圾应该对 GC 几乎没有影响。

然而,实例化数组是一个相对昂贵的操作;由于 EnumSet.add() 非常快,因此数组创建的开销可能非常明显;他们可能做了一些基准测试,并认为通过重载最多 5 个参数进行优化是值得的。

关于Java varargs 分配数组对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7452513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com