Tra*_*ago 0 java variadic-functions
哇!我刚刚意识到Java中的varargs方法导致在调用它们时分配一个数组.不知道为什么我会期待任何不同的东西,但是否应该为数组提供某种池?至少对于最初的0到8个尺寸?Java中是否有任何解决方法使用varargs而不会为每次调用分配数组?
编辑:请理解泄漏到GC的内存只是一个不必要的开销/延迟.这不是一些暗示的错误.仅仅因为Java有GC并不意味着你可以随意创建大量的垃圾.
见例子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.