2015-06-21 27 views
0

我一直在學習一些基本的內存相關概念。是否可以使用JAVA對32位系統上的3 GB Java進行排序

假設我有3 GB以上的數據要排序,那麼是否可以在32位系統或32位JVM上進行排序。

這個堆必須完全駐留在RAM中,或者它也可以駐留在硬盤中?

+1

查看關於最大堆大小的[this](http://stackoverflow.com/questions/2457514/understanding-max-jvm-heap-size-32bit-vs-64bit)。 –

+0

可能重複的[我如何排序非常大的文件](http://stackoverflow.com/questions/7918060/how-do-i-sort-very-large-files) –

回答

2

您可以在32位系統中對超過3GB的數據進行分類。

訣竅是選擇一種排序算法,不需要同時在內存中分配整個數組。實現此目的的一種方法是使用Bucket Sort,External Merge sort或分而治之的排序算法,它不需要一次加載整個數據集。通常,分而治之算法通過將原始數據(比如說有40GB數據)分成更小的數據段(比如每個1GB),分別對每個數據段進行排序,然後合併這些數據段直到數據完全排序。

檢查this post以獲取類似排序算法的鏈接。

+0

您可能想要查看定義[分治法](https://en.wikipedia.org/wiki/Divide_and_conquer_algorithms)。你所描述的是[外部排序](https://en.wikipedia.org/wiki/External_sorting)。 Quicksort是分治算法的一個例子,它需要整個數組在內存中,如果你想要它是有效的。此外,您不要「逐一合併分段」。相反,您使用M路合併算法在一次合併中合併所有分段。 –

+0

我同意你的觀點。我的文章的目的不是暗示任何分而治之的算法都能解決這個問題,而是建議將分治算法(比如外部合併排序)看作是可能的解決方案,它可以在32位JVM。我將編輯帖子以澄清這一點! –

+0

但你沒有解決我的任何一點。首先,外部排序不是一個分而治之的算法。其次,您不要逐個合併細分市場。這篇文章中唯一有用的部分是你的第一句和最後一句。這兩段中間段最多隻會令人困惑,而且在某些地方是錯誤的。 –

相關問題