親愛StackOverflowers量有限的環境中,智能緩存與內存的Java
我在寫這從一個二進制文件排序一個巨大的整數量的應用程序的過程。我需要儘快完成,主要的性能問題是磁盤訪問時間,因爲我做了大量的讀取操作,它顯着減慢了算法的速度。
這樣做將是填補〜可用存儲器的50%與某種類型的緩衝對象(的BufferedInputStream等),然後轉移,從緩衝的對象的整數成整數的陣列(可能需要的標準方式剩餘空餘空間)並對數組中的整數進行排序。將已排序的塊保存回磁盤,重複此過程,直到將整個文件拆分爲已排序的塊,然後將塊合併在一起。 由於數據本質上是重複的(50%用於緩存,50%用於存儲相同數據的數組),排序塊的策略只利用50%的可用內存。
我希望我可以通過編寫自己的緩衝類來優化算法(排序塊)的這個階段,該類允許將數據直接緩存到int數組中,以便數組可以佔用所有的可用空間而不是隻有它的50%,這會使這個階段的磁盤訪問次數減少2倍。事情是我不知道從哪裏開始。
編輯: 本質上,我想找到一種方法來填充一個整數數組,通過只執行一個讀取文件。另一個限制是數組必須使用大部分空閒內存。
如果任何我的發言是錯誤的,或者至少看起來是請大家指正,
任何幫助表示讚賞,
問候
你可以提供一些有關數據的信息。這些只是整數/只有正整數/是否有任何重複等,等等...... – peshkira
不幸的是,沒有關於數據的信息可據我可以告訴文件可以包含任意整數任何 –
*「......可以包含任意整數任何」 - 什麼是整數的最大值,是比他們更大的' Integer.MAX_VALUE'?由於您立即將它們複製到另一個數據結構中,因此還有一個大於默認緩衝區的「InputStream」緩衝區並不會顯示性能提升。配置文件具有不大於磁盤扇區大小的緩衝區,並將它們直接讀入陣列。 –