Java不同数据结构内存消耗比较

测试不同存储方式对内存的消耗情况:

package bfs;

import java.util.HashSet;
import java.util.TreeMap;


public class MemStatistic {

	public static void main(String[] args) {
//		BlockingQueue queue = new LinkedBlockingQueue();
		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

	  /**
	   * 链表部分内存开销测试
	   */    
	    ArrayList  verticesList  =  new ArrayList() ;
	    int[] edges = new int[verticesSize] ;
	    boolean[] visited = new boolean[verticesSize];
	    for(int i = 0 ; i	    	verticesList.add(new Vertex(i,i + (i*3)%100, 1)) ;
	    } 
	    
	  /**
	   * TreeMap部分内存开销测试  
	   */
//	    TreeMap>  vertices2 = new TreeMap>() ;
//	    for(int i = 0 ; i values = new HashSet() ;
//	    	values.add(i + (i*3)%100) ;
//	    	vertices2.put(i, values) ;   
//	    }
	    
	  /**
	   * TreeMap部分内存开销测试  
	   */
//	    TreeMap  vertices3 = new TreeMap() ;
//	    for(int i = 0 ; i

结果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>存储,结果

使用eclipse Memeory Analyzer分析,Map占了大部分内存,约1G空间:


Java不同数据结构内存消耗比较_第1张图片

你可能感兴趣的:(Java多线程)