My take is that reason that System.arraycopy
is native at least partly historical.
In the early days when Java was only interpreted, a native code implementation of arraycopy
would have been substantially faster than an equivalent loop written in Java. The arraycopy
method would have been essential in making (for example) I/O and graphics performance bearable.
Of course, things have changed. Java is now JIT compiled, and the native code compiler can do all sorts of clever things to make simple loops go fast. So it is not obvious that a native implementation of arraycopy
makes a significant difference, "intrinsic" treatment not-withstanding. However, the name, signature and semantics of arraycopy
are so entrenched that they are likely to remain unchanged for as long as Java (as we know it) is used.