首页新闻找找看学习计划

如何设定程序的可用内存大小

0
悬赏园豆:10 [待解决问题]

今天看到一个面试题“每一个ip访问百度,其ip地址都会被记录到后台日志文件中,假设一天的访问日志有100G,求出一天中访问百度次数最多的ip地址,可以使用的内存大小是1G。”

我想知道怎么限制程序可使用内存的大小。

java使用eclipse环境

c++使用visula studio 2010

xwdreamer的主页 xwdreamer | 初学一级 | 园豆:144
提问于:2012-10-09 21:03
< >
分享
所有回答(3)
0

这个问题好像经常问到,网上找找有答案的

chenping2008 | 园豆:9836 (大侠五级) | 2012-10-10 09:04
0

可以考虑内存池技术。或者自己写个类(可以考虑写成单例),来负责内存的申请分配和释放

睿酷 | 园豆:211 (菜鸟二级) | 2012-10-17 12:43
0
  1. 首先解决大文件问题,也就是如何处理100G的一个大文件,这个通常的解决方法就是将大文件分解成许多小文件。我们可以通过对IP地址求hash然后对1024取模将一个100G的大文件分解成1024个小文件(file0,file1......file1023),注意这里的1024个文件并不是平均分的,也就是每个文件大小并不是(100G/1204)。当然我们考虑的时候可以假设文件是平均分的,那么每个文件大小为100M,这样一个100M的文件是可以全部读入大小为1G内存中。这样就解决了第一个文件太大不能一次读入内存的问题。
  2. 考虑到ip地址是32为,那么总共有2^32=4G种可能出现的ip地址,每个ip地址出现的次数不确定,这个具体是由100G大文件决定的。对每个小文件进行处理,我们知道前面每个文件中的ip是通过hash(ip)%1024。这样相当于将2^32=4G种ip地址进行了分段,每个文件中可能出现的ip最大范围是4G/1024=4M。创建一个hashmap,读取小文件中的每个ip地址,判断hashmap中是否有这个ip,如果没有,这往haspmap中插入一个<ip,1>的键值对,即hashmap.put(ip,1);如果haspmap中已经存在了这个ip,那么求出这个ip所对应的值count=haspmap.get(ip),然后往修改这个ip所对应的value,使其数量增加1,即hashmap.set(ip,count+1)。
  3. 当我们求出每个文件中出现次数最大的ip地址以后,我们在比较这1024个文件中的那个ip出现次数最大
PD520C | 园豆:208 (菜鸟二级) | 2012-10-28 22:39

大哥,你这段话是我写的博客啊,http://www.cnblogs.com/xwdreamer/archive/2012/05/09/2492603.html。你把我的博客内容拷贝到这里来回答我的问题

支持(0) 反对(0) xwdreamer | 园豆:144 (初学一级) | 2012-10-28 23:08

@xwdreamer:       我没发现,就觉得这个方案挺合理的,所以就贴过来了

支持(0) 反对(0) PD520C | 园豆:208 (菜鸟二级) | 2012-10-28 23:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册