>我试图实现我自己的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 中。