Java不同資料結構記憶體消耗比較
測試不同儲存方式對記憶體的消耗情況:
<span style="font-size:14px;">package bfs;
import java.util.HashSet;
import java.util.TreeMap;
public class MemStatistic {
public static void main(String[] args) {
// BlockingQueue<Integer> queue = new LinkedBlockingQueue<Integer>();
Runtime rt = Runtime.getRuntime();
System.out.println("Total Memory = " + rt.totalMemory() + " Used Memory = " + (rt.totalMemory() - rt.freeMemory()));
int verticesSize = 5000000 ;
/**
* 陣列部分記憶體開銷測試
*/
Vertex vertices[] = new Vertex[verticesSize] ;
int[] edges = new int[verticesSize] ;
boolean[] visited = new boolean[verticesSize];
for(int i = 0 ; i<verticesSize ; i++){
vertices[i] = new Vertex(i,i + (i*3)%100, 1) ;
}
for(int j =0 ;j<verticesSize ; j++){
edges[j] = j;
visited[j] = true ;
}
<span style="white-space:pre"> </span> /**
<span style="white-space:pre"> </span> * 連結串列部分記憶體開銷測試
<span style="white-space:pre"> </span> */
<span style="white-space:pre"> </span> ArrayList<Vertex> verticesList = new ArrayList<Vertex>() ;
<span style="white-space:pre"> </span> int[] edges = new int[verticesSize] ;
<span style="white-space:pre"> </span> boolean[] visited = new boolean[verticesSize];
<span style="white-space:pre"> </span> for(int i = 0 ; i<verticesSize ; i++){
<span style="white-space:pre"> </span> <span style="white-space:pre"> </span>verticesList.add(new Vertex(i,i + (i*3)%100, 1)) ;
<span style="white-space:pre"> </span> }
/**
* TreeMap部分記憶體開銷測試
*/
// TreeMap<Integer, HashSet<Integer>> vertices2 = new TreeMap<Integer, HashSet<Integer>>() ;
// for(int i = 0 ; i<verticesSize ; i++){
// HashSet<Integer> values = new HashSet<Integer>() ;
// values.add(i + (i*3)%100) ;
// vertices2.put(i, values) ;
// }
/**
* TreeMap部分記憶體開銷測試
*/
// TreeMap<Integer, String> vertices3 = new TreeMap<Integer, String>() ;
// for(int i = 0 ; i<verticesSize ; i++){
// Integer r = i + (i*3)%100 ;
// String values =r.toString() ;
// vertices3.put(i, values) ;
// }
System.out.println("Total Memory = " + rt.totalMemory() + " Used Memory = " + (rt.totalMemory() - rt.freeMemory()));
}
}
class Vertex{
public int id ; //頂點值
public int start ; //edges陣列中邊的起始位置
public int edgeNo; //該頂點的邊數目
public Vertex( int iD, int x, int y){
id = iD;
start = x ;
edgeNo = y ;
}
public String toString(){
return new String(id+":"+start+"-"+edgeNo) ;
}
}</span>
結果1,2,3分別是:
500萬個點:
Total Memory = 127991808 Used Memory = 669888
Total Memory = 399310848 Used Memory = 165807688 約165M
Total Memory = 127991808 Used Memory = 669888
Total Memory = 1809711104 Used Memory = 1283182952 約1.28G
Total Memory = 127991808 Used Memory = 669888
Total Memory = 842203136 Used Memory = 562868512 約562M
第一種消耗的記憶體只有165M, 真少啊 !!!! 連結串列的開銷略高於它,約為186M.
此外,發現TreeMap比HashMap消耗的記憶體略少些,好東西啊!
下面是之前做過的測試: 1000萬條邊,約160M大小檔案。
使用TreeMap<Integer, HashSet<Integer>>儲存,結果
使用eclipse Memeory Analyzer分析,Map佔了大部分記憶體,約1G空間:
相關文章
- 如何比較兩個資料庫表結構的不同資料庫
- 磁碟資料庫與記憶體資料庫的特點比較資料庫記憶體
- JVM記憶體結構、Java記憶體模型和Java物件模型JVM記憶體Java模型物件
- [20210803]對比transparent hugepage的記憶體消耗.txt記憶體
- Postgresql資料庫體系結構-程式和記憶體結構SQL資料庫記憶體
- Oracle - 資料庫的記憶體結構Oracle資料庫記憶體
- 瀚高資料庫記憶體結構資料庫記憶體
- Redis記憶體——記憶體消耗(記憶體都去哪了?)Redis記憶體
- 如何定義一個自帶資料區的結構體:三種資料結構體的比較結構體資料結構
- 淺談JVM記憶體結構 和 Java記憶體模型 和 Java物件模型JVM記憶體Java模型物件
- 記憶體結構記憶體
- JVM讀書筆記之java記憶體結構JVM筆記Java記憶體
- JVM記憶體結構JVM記憶體
- PostgreSQL:記憶體結構SQL記憶體
- C結構體中資料的記憶體對齊問題結構體記憶體
- 結構體記憶體對齊結構體記憶體
- Java常見知識點彙總(⑱)——Jvm記憶體結構、Java記憶體模型、Java物件模型的區別JavaJVM記憶體模型物件
- Hotspot VM 執行時資料區記憶體結構劃分HotSpot記憶體
- MySQL整體架構與記憶體結構MySql架構記憶體
- OpenResty 和 Nginx 的共享記憶體區是如何消耗實體記憶體的RESTNginx記憶體
- 資料管理架構:單體資料架構與分散式資料網格比較 - enyo架構分散式
- Java虛擬機器系列之Java記憶體結構簡介Java虛擬機記憶體
- MRAM與常用計算機記憶體的效能比較計算機記憶體
- 理解JVM(一):記憶體結構JVM記憶體
- JVM(七):JVM記憶體結構JVM記憶體
- JVM記憶體結構劃分JVM記憶體
- ABAP Memory Inspector 裡對動態記憶體物件的記憶體消耗度量方式記憶體物件
- 【JVM之記憶體與垃圾回收篇】JVM與Java體系結構JVM記憶體Java
- 達夢資料庫基礎知識(三)達夢資料庫記憶體結構資料庫記憶體
- Spark效能優化:診斷記憶體的消耗Spark優化記憶體
- EEPROM與記憶體Flash消耗能量計算記憶體
- JVM的基本結構和JVM的記憶體結構JVM記憶體
- JVM學習(一)——記憶體結構JVM記憶體
- Oracle OCP(39):Database 記憶體結構OracleDatabase記憶體
- JVM之記憶體結構詳解JVM記憶體
- JVM及其記憶體結構劃分JVM記憶體
- Java虛擬機器01——Java記憶體資料區域和記憶體溢位異常Java虛擬機記憶體溢位
- Java記憶體區域(執行時資料區域)和記憶體模型(JMM)Java記憶體模型
- JAVA堆外記憶體排查小結Java記憶體