为什么 System.arraycopy 在 Java 中是原生的?

2022-08-31 11:09:19

我很惊讶地在Java源代码中看到System.arraycopy是一种原生方法。

当然,原因是因为它更快。但是,代码能够采用哪些本机技巧来使其更快?

为什么不直接循环访问原始数组并将每个指针复制到新数组 - 当然这不是那么慢和麻烦?


答案 1

在本机代码中,它可以通过单个/memmove来完成,而不是n个不同的复制操作。性能上的差异是巨大的。memcpy


答案 2

它不能用Java编写。本机代码能够忽略或消除 Object 数组和基元数组之间的差异。Java做不到这一点,至少效率不高。

而且它不能用单个,因为重叠数组需要语义。memcpy()