2011-03-06 86 views
3

我想知道Java VM如何分配內存? JAVA在我們的計算機的物理內存中分配內存嗎? 現在,我試圖比較兩個數據結構,鏈接列表和數組,以頁面錯誤和緩存命中/未命中方面謹慎,以查看每個數據結構在真正低級別(硬盤,內存,緩存級別)中的性能,Java VM如何分配內存?

回答

5

我不知道這是否回答你的問題,但IBM有一篇關於JVM如何在Windows/Linux上使用本機內存的好文章。

+0

很好的鏈接,謝謝! – 2011-03-06 21:32:48

1

Java在啓動時從操作系統分配連續內存。一旦它擁有堆所需的內存,它將控制如何分配內存。

Java中的內存被連續分配,所以每個對象很可能會按照分配的順序在內存中分配。 (但這不能保證) 此外,如果對象存在次要集合,它可能會按照發現對象的順序進行復制。 (再次不保證)

就個人而言,如果您期望隨機訪問,我會使用ArrayList,如果您想要插入任何地方,但除了列表的末尾,LinkedList。

Java執行得非常糟糕,其中任何一項都被交換到磁盤。我建議確保它足夠小以適應內存。它的緩存行爲不容易控制,你可以做的最好的事情是試驗JVM如何優化你的代碼和它的緩存行爲。