【发布时间】:2011-03-06 19:12:46
【问题描述】:
我想知道 Java VM 是如何分配内存的? JAVA在我们计算机的物理内存中分配内存吗? 现在我正在尝试比较两个数据结构,链表和数组,注意页面错误和缓存命中/未命中,以查看每个数据结构在非常低级别(硬盘、内存、缓存级别)的性能
【问题讨论】:
标签: java arrays memory jvm linked-list
我想知道 Java VM 是如何分配内存的? JAVA在我们计算机的物理内存中分配内存吗? 现在我正在尝试比较两个数据结构,链表和数组,注意页面错误和缓存命中/未命中,以查看每个数据结构在非常低级别(硬盘、内存、缓存级别)的性能
【问题讨论】:
标签: java arrays memory jvm linked-list
我不知道这是否能回答您的问题,但IBM 有一篇关于 JVM 如何在 Windows / Linux 上使用本机内存的好文章。
【讨论】:
Java 在启动时从操作系统分配连续内存。一旦获得堆所需的内存,它就会控制内存的分配方式。
Java 中的内存是连续分配的,因此每个对象很可能会按照分配的顺序出现在内存中。 (但这不能保证) 此外,如果对象在次要集合中幸存下来,则很可能会按照对象被发现的顺序被复制。 (同样不保证)
如果您希望随机访问,我个人会使用 ArrayList,如果您想插入到列表末尾以外的任何位置,我会使用 LinkedList。
Java 的性能非常糟糕,因为它被交换到磁盘。我建议确保它足够小以随时放入内存中。它的缓存行为不容易控制,您可以做的最好的事情是试验 JVM 如何优化您的代码及其缓存行为。
【讨论】: