【问题标题】:JAVA why is arrayCopy a System call? [duplicate]JAVA为什么arrayCopy是系统调用? [复制]
【发布时间】:2013-02-08 19:43:35
【问题描述】:

例子

short size = 1234;
    byte[] payload = {12,43, 55,123, 11, 55};

byte [] shortSize = ByteBuffer.allocate(2).putShort(size).array();
byte[] entirePayload = new byte[shortSize.length+payload.length];   

System.arraycopy(shortSize, 0, entirePayload, 0, 2);
System.arraycopy(payload, 0, entirePayload, 2, payload.length);

这是一个 Java 系统调用是否存在根本原因?

【问题讨论】:

  • 仅仅因为一个函数驻留在System 类中并不能使其成为“系统调用”。 System 只是另一个 Java 类。

标签: java


【解决方案1】:

也许arraycopy 更适合java.util.Arrays,但直到Java 1.2 才添加该类,而arraycopy 在Java 的一开始就存在。 System 似乎是放置它的下一个最佳位置。

还要注意,这个方法是用本机代码实现的,为了让它更快,所以有点特别。

【讨论】:

  • 我一般不太喜欢原生方法。 Math.sin() 慢得离谱。
  • @Legend:好吧,回想一下 Java 1.1,那时 VM 只是一个低级字节码解释器,所有数组访问总是经过边界检查。你会喜欢 System.arrayCopy 很多。
  • @Boann +1 更不用说完全超出常规 Java 代码范围的块复制操作了。
猜你喜欢
  • 2016-04-30
  • 1970-01-01
  • 2017-03-20
  • 2018-11-07
  • 1970-01-01
  • 2021-10-27
  • 2015-05-24
  • 2020-05-24
相关资源
最近更新 更多