`
cloudeagle_bupt
  • 浏览: 536437 次
文章分类
社区版块
存档分类
最新评论

存储一个图的内存开销

 
阅读更多

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()));  
	}
}

 


分享到:
评论

相关推荐

    分页管理(操作系统分页存储管理.模拟多进程内存动态分配)

    本设计要求用高级语言编写模拟一个简单的内存管理程序。通过本实验可以加深对常见操作系统的内存管理模块的实现方法的理解。 2. 要求 (1)设计用户程序数组、PCB、页表、内存分配表等数据结构; (2)编程模拟OS...

    6数据库系统习题.pdf

    由于进程数目少,内存开销和进程通讯开销小,因此_____是较优的一种。 A、N 方案 B、2N 方案 C、M+N 方案 D、N+1 方案 16. 数据库系统软件包括_____和_____。 数据库 DBMS OS、DBMS 和高级语言 DBMS 和 OS 数据库...

    分页管理(操作系统分页存储管理,模拟多进程内存动态分配)

    本设计要求用高级语言编写模拟一个简单的内存管理程序。通过本实验可以加深对常见操作系统的内存管理模块的实现方法的理解。 2. 要求 (1)设计用户程序数组、PCB、页表、内存分配表等数据结构; (2)编程模拟OS...

    内存管理内存管理内存管理

    (映射是一个表示一一对应关系的数学术语 —— 当内存的虚拟地址有一个对应的物理地址来存储内存内容时,该内存将被映射。) 基于 UNIX 的系统有两个可映射到附加内存中的基本系统调用: brk:brk() 是一个非常...

    操作系统(内存管理)

    (映射是一个表示一一对应关系的数学术语 —— 当内存的虚拟地址有一个对应的物理地址来存储内存内容时,该内存将被映射。) 基于 UNIX 的系统有两个可映射到附加内存中的基本系统调用: brk: brk() 是一个非常...

    一种Hadoop小文件存储和读取的方法.

    然而,HDFS 设计的初衷是存储超大文件,对于海量小文件,由于 NameNode 内存开销等问题,其存储和读取性能并不理想。提出一种基于小文件合并的方法 HIFM( Hierarchy Index File Merging) ,综合考虑小文件之间的...

    用于Go的缓存库,GC开销为零。-Golang开发

    FreeCache-用于Go的缓存库,具有零GC开销和高并发性能。 内存中的对象长期存在...功能存储数亿个条目零GC开销大量并发线程安全访问Pure Go实现过期支持几乎LRU算法严格限制的内存使用附带一个支持以下任务的玩具服务器

    Android数据储存

    Android数据存储(非图片),将网络json数据系列化成对象,存储到内存和文件中。下一次直接从内存或者文件中获取数据,减少网络开销。

    底层读键的两种简单思路的空间时间开销简单测试

    任何key,最基础的抽象,都是把键值抽象到内存上,由于按键的特殊性,它可以只需要用 位 来存储硬件上的键值状态。

    内存数据交换格式ApacheArrow.zip

    每个系统都有自己内部的内存格式70-80%的CPU浪费在序列化和反序列化过程类似功能在多个项目中实现,没有一个标准所有系统都使用同一个内存格式避免了系统间通信的开销项目间可以共享功能(比如Parquet-to-Arrow ...

    广义表的二叉链式存储表示及其算法设计

    在分析广义表(Generalized list)的抽象数据类型定义、特点和存储结构的基础上,提出了广义表的二叉链式存 储表示(称之为广义二叉链表,...运行时的内存开销和提高算法的执行效率,大多是采用非递归算法实现。

    基于GPU的内存数据库索引技术研究

    设计一个灵活的溢出桶管理机制,可提高多维哈希索引在 GPU 上的存储空间利用率;对提出的记录并行批量插入方案进行算法时间和空间复杂度的分析,并与传统的 CPU 算法进行相关对比;在各种硬件平台上对多维线性哈希...

    多线程内存数据库服务器设计

    文章介绍了一个多线程内存数据库服务器(MTMDS),由于采用多线程技术,克服了多进程体系结构资源消耗多、进程调度开销大、难以实现大容量共享存储等主要缺陷.文中详细阐述了采用"移动平均反馈”事务预测法(MMFP)的实时...

    论文研究-基于内存受限的RFID复杂事件处理优化算法.pdf

    复杂事件处理是RFID数据管理的关键技术,由于受到内存的限制,海量实时的RFID原始流数据处理 的中间结果部分只能存储在外存中,会产生内存瓶颈,严重限制了大规模RFID的部署。为此,提出了B -树 分时优化索引(BIOT...

    freecache:用于Go的缓存库,GC开销为零

    特征存储数亿个条目零GC开销高并发线程安全访问纯Go实施过期支持近乎LRU算法严格限制内存使用附带一个玩具服务器,该玩具服务器通过管道支持一些基本的Redis命令迭代器支持表现这是基准测试结果与内置地图的比较结果...

    contiguous_pytorch_params:通过将参数存储在一个连续的内存块中来加速训练

    通过将参数存储在一个连续的内存块中来加速训练。 3行代码加速您的优化器! 该图显示了使用Adam和渐变裁剪功能在Cifar10上使用Resnet50对GPU步迹进行比较,其中包含和不包含连续参数。上面的跟踪与默认优化器一起...

    simpool:Simpool是一组简单的池内存分配器

    Simpool是一个非常简单的池化内存分配器,它通过重载::operator new(std::size_t)并实现STL分配器概念来提供在C ++中使用的配方。 背景 池内存分配器背后的概念是减少分配内存的系统调用次数,而是从已经分配的内存...

    flatdata:一次写入,多次读取,开销最小的二进制结构化文件格式

    Flatdata是一个提供数据结构的库,用于以最小的开销方便地创建,存储和访问打包的内存可映射结构。 使用flatdata ,用户可以使用一种非常简单的模式语言来定义数据格式的模式,该语言支持纯结构,向量和多向量。 ...

    论文研究-大规模地形真三维可视化系统设计与实现.pdf

    对地形绘制中的四叉树剖分控制、DEM分块、纹理自动分块、地形数据的数据库存储、视见体剪裁、误差控制、裂缝拼接等方面进行了深入研究,提出了改进方法,并结合OpenGL立体显示技术,基于微机平台实现了一个简洁、...

Global site tag (gtag.js) - Google Analytics