我正在尝试实现我自己的for loop
课程用于教育目的,当我需要让它成长时,我需要将旧的小数组的内容复制到新的更大的数组中。
使用O(n) time
执行此操作效率非常低,并且需要System.arraycopy()
,具体取决于要复制的数组的大小。幸运的是,Java具有for loop
函数,我怀疑它不使用System.out.println()
,但会立即复制整个数组,从而减少时间。
然而,我自己可以做这些内存副本还是这么深埋,只有java编译器可以做到这一点?
P.S有许多我不知道如何实现的功能,似乎使用魔术words
或套接字。
澄清 我只是想知道自己如何能够做这些优化的记忆管理。
答案 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中不包含运行它所需的编译库。