Java varargs分配数组对象?

Tra*_*ago 0 java variadic-functions

哇!我刚刚意识到Java中的varargs方法导致在调用它们时分配一个数组.不知道为什么我会期待任何不同的东西,但是否应该为数组提供某种池?至少对于最初的0到8个尺寸?Java中是否有任何解决方法使用varargs而不会为每次调用分配数组?

编辑:请理解泄漏到GC的内存只是一个不必要的开销/延迟.这不是一些暗示的错误.仅仅因为Java有GC并不意味着你可以随意创建大量的垃圾.

irr*_*ble 5

见例子EnumSet.vararg方法

of(E first, E... rest) 
Run Code Online (Sandbox Code Playgroud)

超载了

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) 
Run Code Online (Sandbox Code Playgroud)

如果args为5或更小,则避免创建vararg数组.(EnumSet可能在这里走得太远了)

我不认为这确实是GC关注的问题.创建的数组很快被解除引用,这样年轻的垃圾应该对GC几乎没有影响.

但是,实例化一个阵列是一个相对昂贵的操作; 因为EnumSet.add()非常快,所以数组创建的开销非常明显; 他们可能做了一些基准测试,并决定优化重载最多5个args.