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



>我试图实现我自己的ArrayList类用于教育目的,当我需要让它增长时,我需要将旧的小数组的内容复制到新的大数组中。

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

但是,我自己是否有可能做这种内存副本,或者这是否埋藏得太深,以至于只有Java编译器才能做到这一点?

附言有很多我不知道如何实现的功能,似乎可以使用魔术System.out.println()或套接字工作。

为了澄清我只是想知道我怎么能自己做这些省略的记忆管理。

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

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

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

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

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

最新更新