不解的内存泄露(2)

因为前面一个星期回家看病(都是coding)惹得祸 所以一直没上线

所以前面的帖子就没看
当然问题也没解决 [url]http://www.iteye.com/post/400274[/url]

有朋友说MD5有问题 我觉得没有阿 还是贴下保险
[code]
/**
* @functionName: generateMD5
* @description: generate the MD5 digest from 16 byte int to the ASCII format
* @version: 1.0
* @beCareful:16 byte int -> 32 byte ASCII
* @param source
* @return String the 32 byte ASCII MD5
*/
public static String generateMD5(String source)
{
byte[] bSource = source.getBytes();
MessageDigest md = null;
try
{
md = MessageDigest.getInstance("MD5");
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
byte[] md5 = md.digest(bSource);
StringBuffer buff = new StringBuffer();
for(int i = 0; i < md5.length; i++)
{
String byteStr = Integer.toHexString(md5[i] & 0xFF);
if(byteStr.length() < 2) buff.append('0');
buff.append(byteStr);
}
return buff.toString();
}
[/code]

从jprofile的截图来看
内存的占用集中在Page类的parseHyberlinks方法里面 而且是String没有释放
[color=red]parseHyberlink方法见前贴[/color]

整个程序的开始
是从
[code]
private void fetch()
{
while(true)
{
try
{
new FetchWeb().fetch();
}
catch (URISyntaxException e)
{
Log4j.logger.debug(e);
e.printStackTrace();
}
}
}[/code]
开始
而在FetchWeb().fetch()中又调用了
[code]public void fetch() throws URISyntaxException
{
String iteratorHashSetUvUrlsNext=UrlDB.pickUrl();
System.out.println("the url we pick: " + iteratorHashSetUvUrlsNext);
WebPageProcessFace tryit = new WebPageProcessFace(iteratorHashSetUvUrlsNext);
try
{
if(tryit.doSomething())
{
//问题会不会这?
if(UrlDB.addUrl(iteratorHashSetUvUrlsNext, tryit.getLinks()))
Log4j.logger.info("addurl ok");
tryit = null;
}
else
{
tryit = null;
}
}
catch (IOException e)
{
tryit = null;
e.printStackTrace();
Log4j.logger.debug(e);
}
tryit = null;
Log4j.logger.info("\n");
Log4j.logger.info("\n");
}[/code]

[color=red]这个地方的程序有点逻辑不清 主要是当时匆匆忙忙做得 本想测试通过了在改 。。。[/color]

addUrl的程序在前帖有

我是这样想的 java的内存回收有点像重力场一样 对象没有东西引用了才会回收 但是jprofile的图显示从程序入口开始就一直占着内存 以至于我不能判断出到底是那出错了

最初的判断是从parseHyberlink开始 返回一个url的集合然后将其加入没有访问的url集合,可能就是在这个过程中哪边的String引用没有释放
可能是在addurl()中 或者其他?

我计算了下当时没访问的url的集合中共有100000个数量级的字段 一个字段估计是60个byte 一起就是大约10M数量级
当时已经下载了200M左右的网页数据
但是300min内就泄露了大概70M内存?到底是什么泄露了?由于parseHyberlink方法中一开始得出的link并不是都会加到集合中 而是必须是一个有效的url才行 这样的话 可能也许原始的links会有70M?
S H I T
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值