存储一个图的内存开销

100万点,10万边。

邻接表存法:

HashMap<Integer, HashSet<Integer>>的做法就不说了,这个最吃内存,开销肯定最大。


其余的:


 
3倍整型数组
Total Memory = 127991808 Used Memory =    669,888
Total Memory = 127991808 Used Memory = 13,339,680


public class Vertex{
public int id ; //顶点值
public int start ;  //edges数组中边的起始位置
public int edgeNo;   //该顶点的边数目

public Vertex(){
 
}

public Vertex( int iD, int x, int y){
id = iD;
start = x ;
edgeNo = y ;
}

Vertices数组:
       Vertex[] vertices = new Vertex[1000000] ;
       int[] edges = new int[100000] ;
       for(int i =0; i<vertices.length ;i++ ){
        vertices[i] = new Vertex(0,i,0);
       }
       for(int i =0; i<edges.length ;i++ ){
        edges[i] = i ;
       }

Total Memory = 127991808 Used Memory =    669,888
Total Memory = 127991808 Used Memory = 29,368,024


public String toString(){
        return new String(id+":"+start+","+edgeNo) ;
}
    }
Vertices数组链表ArrayList:
Total Memory = 127991808 Used Memory = 669888
Total Memory = 127991808 Used Memory = 34929568





package memoryTestForIncBSP;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;

import mergeTest.Vertex;

public class MemoryTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Runtime rt = Runtime.getRuntime();  
	        System.out.println("Total Memory = " + rt.totalMemory() + " Used Memory = " + (rt.totalMemory() - rt.freeMemory()));  
	        
//	        Vertex[] vertices = new Vertex[1000000] ;
//	        int[] edges = new int[100000] ;
//	        for(int i =0; i<vertices.length ;i++ ){
//	        	vertices[i] = new Vertex(0,i,0);
//	        }
//	        for(int i =0; i<edges.length ;i++ ){
//	        	edges[i] = i ;
//	        }
	        
	        ArrayList<Vertex> vertices = new ArrayList<Vertex>() ;
	        int[] edges = new int[100000] ;
	        for(int i =0; i<1000000 ;i++ ){
	        	vertices.add(new Vertex(0,i,0));
	        }
	        for(int i =0; i<edges.length ;i++ ){
	        	edges[i] = i ;
	        }
	        
//	        int[] vertices = new int[3000000] ; 
//	        int[] edges = new int[100000] ;
//	        for(int i =0; i<vertices.length ;i++ ){
//	        	vertices[i] = i;
//            }
//	        for(int i =0; i<edges.length ;i++ ){
//	        	edges[i] = i;
//            }
	        
    	      System.out.println("Total Memory = " + rt.totalMemory() + " Used Memory = " + (rt.totalMemory() - rt.freeMemory()));  
	}
}

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值