gpt4 book ai didi

java - java中的数组实际上是顺序内存数据结构吗?或物理顺序?

转载 作者:行者123 更新时间:2023-12-02 08:33:03 24 4
gpt4 key购买 nike

我试图找出原始 java“数组”和“列表”数据结构(如 ArrayList)之间的区别,并找到类似这样的文章或问答 (Difference between List and Array)。包括该链接在内的许多文章都指出 java 原语“数组”是“顺序内存”。在这一点上,究竟什么是顺序?这在物理内存中真的是顺序的吗?还是虚拟内存中的顺序?我的猜测是虚拟内存中的顺序,因为操作系统通常分配物理内存,而应用程序(JVM)不关心特定的内存分配。但我不知道确切的答案。

最佳答案

Java 数组在虚拟内存中是连续的,不一定在物理内存中。

用户空间应用程序(例如 JVM)无法决定构成其虚拟地址空间的物理页面在内存中是否连续。事实上,在典型的现代操作系统中,它甚至无法知道这一点。这一切都通过机器的虚拟内存硬件和(用户空间)指令集架构对用户空间应用程序隐藏了。


查看 JVM 规范不会对物理内存问题有指导意义。它根本不相关/超出范围。

JVM 规范没有强制数组在虚拟内存中是连续的。但是,涉及非连续虚拟内存的(假设的)数组实现会导致昂贵的数组操作,因此您不太可能找到执行此操作的主流 JVM。

引用资料:

  • JVM Spec 2.7说:

    "The Java Virtual Machine does not mandate any particular internal structure for objects."

    规范的其他部分暗示“对象”在这里指的是类和数组的实例。

  • JVM Spec 2.4谈论数组,但没有提到它们在内存中的表示方式。


数组和ArrayList之间的区别在更高层次上。数组具有固定大小。 ArrayList 具有可变大小。但在幕后,ArrayList 是使用(单个)数组实现的……如果列表变得太大,可以重新分配(即替换)它。

关于java - java中的数组实际上是顺序内存数据结构吗?或物理顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24799928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com