所以我有一個大整理我必須使用(以70Mb的順序)。作爲閱讀過程的一部分,我需要暫時存儲它們。我可以將它們分散在幾個IntBuffers上,或者分配幾個大的數組。在內存使用方面,IntBuffer與數組的比較如何?
但是我找不到任何有關IntBuffer與內存使用情況(包括所有元數據)的數據比較的文檔。有人對這個有了解嗎?
所以我有一個大整理我必須使用(以70Mb的順序)。作爲閱讀過程的一部分,我需要暫時存儲它們。我可以將它們分散在幾個IntBuffers上,或者分配幾個大的數組。在內存使用方面,IntBuffer與數組的比較如何?
但是我找不到任何有關IntBuffer與內存使用情況(包括所有元數據)的數據比較的文檔。有人對這個有了解嗎?
就內存使用情況而言,如果數組很大,在int[]
和堆IntBuffer
或直接IntBuffer
之間幾乎沒有什麼區別。 (有一個小頭)
在性能方面int[]
是最快的,並且直接IntBuffer
與本機字節排序是第二快。 IntBuffer的優點在於其堆疊非常大,而且可以有更大的尺寸,例如70 GB,而不增加堆大小或全部GC時間。
對於70 MB的陣列,它足夠小,以至於最簡單的解決方案int[]
可能是最好的。 (這也將是最容易編寫和運行效率最高的)
因此,他們中的任何一個都會爲每個元素存儲元數據,還是整個對象只有少量的元數據,然後才存儲數據? – Bartvbl
兩個存儲每個對象的元數據,而不是每個元素。在int []的情況下,其8-12字節。對於IntBuffer約40字節。 –
相對於70MB的整數,IntBuffer添加的元數據不算什麼。但一個分析器會給你一個更完整的答案。
爲什麼你需要它們,並且還有關於這些整數的更多知識嗎?他們是集合還是有重複?訂單是否起作用? –
@userunknown準確地說,它是來自OBJ文件的幾何數據。在解析文件時,頂點需要鏈接到索引,以確定它們屬於三維模型中的哪個三角形。我仍然試圖找出一個好的算法來完成這個任務,但是由於我對ArrayLists的嘗試災難性地失敗了(內存使用超過500Mb),我想知道更多的內存高效存儲方法。 – Bartvbl
IntBuffer給你的數組不是什麼? – EJP