On 2021-02-16 Brett Okken wrote: > We found in LZDecoder that using System.arrayCopy with doubling size > is faster than Arrays.fill (especially for larger arrays). > We can apply that knowledge in the BasicArrayCache, where there are > some use cases which require clearing out the array prior to returning > it.
A simple micro-benchmark gives me a very different result. The alternative method is roughly 70 % slower than Arrays.fill on my system with a big array. If Arrays.fill were so terrible, it should be improved instead. Even if the alternative method were faster, it would need to be a lot faster to be worth the extra complexity. If Arrays.fill version (uncomment/comment the code) is slower for you, it must depend on the Java runtime or operating system or such things. import java.util.Arrays; public class Foo { public static void main(String[] args) throws Exception { byte[] buf = new byte[10 << 20]; for (int i = 0; i < 4000; ++i) { //Arrays.fill(buf, (byte)0); buf[0] = (byte)0; buf[1] = (byte)0; buf[2] = (byte)0; buf[3] = (byte)0; int toCopy = 4; int remaining = buf.length - toCopy; do { System.arraycopy(buf, 0, buf, toCopy, toCopy); remaining -= toCopy; toCopy <<= 1; } while (remaining >= toCopy); if (remaining != 0) { System.arraycopy(buf, 0, buf, toCopy, remaining); } } } } -- Lasse Collin | IRC: Larhzu @ IRCnet & Freenode