java如何自己实现System.arraycopy()

时间:2016-02-09 09:29:26

标签: java memory

我正在尝试实现我自己的for loop课程用于教育目的,当我需要让它成长时,我需要将旧的小数组的内容复制到新的更大的数组中。

使用O(n) time执行此操作效率非常低,并且需要System.arraycopy(),具体取决于要复制的数组的大小。幸运的是,Java具有for loop函数,我怀疑它不使用System.out.println(),但会立即复制整个数组,从而减少时间。

然而,我自己可以做这些内存副本还是这么深埋,只有java编译器可以做到这一点?

P.S有许多我不知道如何实现的功能,似乎使用魔术words或套接字。

澄清 我只是想知道自己如何能够做这些优化的记忆管理。

1 个答案:

答案 0 :(得分:0)

java.lang.System中,您可以看到声明,但没有源代码:

public static native void arraycopy(Object src,  int  srcPos,
                                    Object dest, int destPos,
                                    int length);

这是因为它是一个本机方法,在JVM提供的库中实现。 JVM之间的实现可能不同,并且它们的二进制文件在平台之间有所不同,因为需要为每个平台编译它们。

您可以编写自己的本机库。要达到您想要的优化级别,您需要精通某些较低级别的语言,如C或汇编程序。使用更高的语言可能会遇到与Java相同的障碍,因为您通常无法直接访问内存。

编写自己的本机库的缺点是您的应用程序将不再是平台独立的,因为与System不同,JVM中不包含运行它所需的编译库。