我试图找出Java原始“数组”和“List”数据结构(如ArrayList)之间的区别,并找到了像这样的文章或Q&A(Difference between List and Array)。许多文章,包括该链接,指出Java原始“数组”是“顺序内存”。在这一点上,“顺序”究竟是什么意思?这真的是物理内存中的顺序吗?还是虚拟内存中的顺序?我的猜测是虚拟内存中的顺序,因为操作系统通常分配物理内存,应用程序(JVM)不关心具体的内存分配。但我不知道确切的答案。
我试图找出Java原始“数组”和“List”数据结构(如ArrayList)之间的区别,并找到了像这样的文章或Q&A(Difference between List and Array)。许多文章,包括该链接,指出Java原始“数组”是“顺序内存”。在这一点上,“顺序”究竟是什么意思?这真的是物理内存中的顺序吗?还是虚拟内存中的顺序?我的猜测是虚拟内存中的顺序,因为操作系统通常分配物理内存,应用程序(JVM)不关心具体的内存分配。但我不知道确切的答案。
ArrayList
的区别在于更高的层面上。数组具有固定大小,而 ArrayList 具有可变大小。但在底层,一个 ArrayList 是使用一个(单一)数组实现的...如果列表增长得太大,该数组可以被重新分配(即替换)。要确定是否需要将数组分配到连续内存中,您需要查看JVM规范,但出于效率考虑,以malloc类型的方式分配数组是有意义的。
至于虚拟内存与物理内存,所有(操作系统以上的)都使用虚拟内存。 JVM不够低级别,无法访问Ring-0层次的内核资源。
最后,您为什么感兴趣? 您在编写自己的JVM吗?
Array
和ArrayList
之间的一些主要区别包括:
这可能是一篇有趣的文章,可以解释您的问题。
总结:
class A {
int x;
int y;
}
public void m1() {
int i = 0;
m2();
}
public void m2() {
A a = new A();
}
http://www.programcreek.com/2013/04/what-does-a-java-array-look-like-in-memory/