<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>waldenlake</title>
    <description></description>
    <link>http://waldenlake.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>很希望这个版的事实版主来看下我的帖，然后给点建议</title>
        <author>waldenlake</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://waldenlake.javaeye.com">waldenlake</a>&nbsp;
          链接：<a href="http://waldenlake.javaeye.com/blog/166239" style="color:red;">http://waldenlake.javaeye.com/blog/166239</a>&nbsp;
          发表时间: 2008年02月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          小生就要毕业了 出生一三流大学（如果清华一流，南理二流的话）,但。。。。。。不多说，各位看简历。<br />只是现在没找到工作，有些失落。<br />o是那种心气有点高的人. 请各位看后点评点评。给些建议。<br />顺便问下，作彩铃开发怎么样？南京和北京好远，哎呀就是北京掌上灵通，我的决定要不要去。<br /><br /><br />－－－－－－－－－－－－－－简 历－－－－－－－－－－－－－－－－－<br /><strong>个人基本信息</strong><br />姓 名： xxxxx<br />性 别： 男<br />出生日期： 1986/2/10<br />户 口： 南 京<br />政治面貌： 中共党员<br />电子邮件： gymitat@gmail.com<br />移动电话： 086-13813147455<br />家庭电话： xxxxx<br />宿舍电话： xxxxx<br /><br /><strong>教 育 经 历</strong><br />2004/09--2008/09 xxxxx 信息管理与信息系统本科<br />2005/09--2007/09 xxxxx 国际经济与贸易辅修<br /><br /><strong>求 职 意 向</strong><br />希望行业： 计算机软件，互联网/电子商务等<br />目标职能： 软件工程师，互联网软件开发工程师等<br /><br /><strong>IT 技 能</strong><br />技能名称熟练程度使用时间<br />java 熟练24个月<br />linux 熟练12个月<br />Mysql&SQLServer 熟练12个月<br />能熟练的使用struts、spring、hibernate，能熟练的使用xml、javascript、css、html，熟练使用ant、log4j等工具。<br />会使用lucene，阅读过nutch部分代码。<br />熟悉数据库有关知识, 熟练的使用mysql和mssql。<br />可以熟练的阅读英语类技术文档, 热爱软件建模和搜索引擎技术。<br /><br /><strong>实 习 经 验</strong><br />2007/8--2007/8 北京xx在线网络技术有限公司<br />商务搜索部软件工程师（第一届xxxxxxx成员）<br /><br /><strong>项 目 经 验</strong><br />2007/12--2008/3 web2.0网站：旧爱网 (www.jiuai365.cn、www.jiuai365.com.cn)（请看页脚“关于我们”）<br />开发工具： eclipse java<br />项目描述： 实现一个实用性的web2.0网站，整体采用struts、spring、hibernate框架；junit进行测试；<br />运用ajax改善用户体验；页面采用css+div布局；数据库采用mysql。<br />责任描述： 对项目进行分析、设计、java css js jsp的代码编写、测试，对上线后的网站进行优化。<br />－－－－－－－－－－－－－－－－－－－<br />2007/09--2007/11： 百万级搜索引擎<br />开发工具： eclipse java<br />项目描述： 实现一个百万级的小型搜索引擎(已完成crawler)。 crawler特点：多线程抓取，socket抓<br />取，遵守robots协议，采用htmlparser解析网页；支持多字符集；支持gzip解压。<br />责任描述： 实现crawler indexer searcher并最终构建出一个小型搜索引擎。<br />－－－－－－－－－－－－－－－－－－－<br />2007/08--2007/08： 桌面搜索工具<br />开发工具： eclipse java c++<br />项目描述： 实现一个类似于百度/google的桌面搜索软件。<br />责任描述： 数据预处理 ，字典预处理（多哈希），分词模块的实现（后向最小匹配）。<br />－－－－－－－－－－－－－－－－－－－<br />2007/04--2007/05： xxxx大学青年志愿者协会网站<br />开发工具： eclipse java<br />项目描述： 制作青年志愿者协会的网站，要求可以管理会员，发布新闻，运用struts＋JDBC实现。<br />责任描述： 负责网站架构及后台的制作。<br /><br /><strong>所 获 证 书</strong><br />2007/10 SUN SCJP<br />2007/6 全国计算机软件技术资格与水平考试 数据库系统工程师<br />2006/9 大学英语六级<br />2006/9 全国计算机等级三级A<br /><br /><strong>曾 任 职 务</strong><br />计算机系学生会主席 信息工程学院学生会副主席 班长<br /><br /><strong>所 获 奖 励</strong><br />2007/10 校一等奖学金<br />2007/09 院十佳大学生<br />2007/09 院优秀学生干部<br />2006/12 校摄影大赛艺术组三等奖<br />2006/11 校优秀三好学生<br />2006/09 校一等奖学金<br />2005/09 省政府奖学金<br /><br /><strong>社 会 实 践</strong><br />2006/07--2006/08 大学生三下乡实践<br />在xxxxx中学主要负责网络及机房设施的正常运行<br /><br /><strong>附 加 信 息</strong><br />兴趣爱好 ： 小提琴、摄影、散步。<br />优 势 ： 团队精神、沟通能力、学习能力、忍受力、激情。<br />职业目标 ： 为开源事业作出贡献；为高等教育事业作出贡献；成为自己热爱领域中的佼佼者。<br />座 右铭 ： 自助者天助 / Mind and Hand / 凡事太急,势必缘分早尽。
          <br/>
          <span style="color:red;">
            <a href="http://waldenlake.javaeye.com/blog/166239#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Feb 2008 18:53:12 +0800</pubDate>
        <link>http://waldenlake.javaeye.com/blog/166239</link>
        <guid>http://waldenlake.javaeye.com/blog/166239</guid>
      </item>
      <item>
        <title>好像JE的搜索功能挂掉了？</title>
        <author>waldenlake</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://waldenlake.javaeye.com">waldenlake</a>&nbsp;
          链接：<a href="http://waldenlake.javaeye.com/blog/143372" style="color:red;">http://waldenlake.javaeye.com/blog/143372</a>&nbsp;
          发表时间: 2007年11月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          晕 我搜索文章连续敲了好几个关键字都没结果 像“测试”什么的 ，但是搜会员是好的。
          <br/>
          <span style="color:red;">
            <a href="http://waldenlake.javaeye.com/blog/143372#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 24 Nov 2007 23:09:26 +0800</pubDate>
        <link>http://waldenlake.javaeye.com/blog/143372</link>
        <guid>http://waldenlake.javaeye.com/blog/143372</guid>
      </item>
      <item>
        <title>mysql 百万级数据插入更新速度问题</title>
        <author>waldenlake</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://waldenlake.javaeye.com">waldenlake</a>&nbsp;
          链接：<a href="http://waldenlake.javaeye.com/blog/139835" style="color:red;">http://waldenlake.javaeye.com/blog/139835</a>&nbsp;
          发表时间: 2007年11月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          大家好^^<br /><br />我现在正在作毕业设计 题目是构建一个<span style="color: red">搜索引擎</span><br /><br />现在已经实现了crawler，代码全是自己写的，没有参开其他的open source,所以完全没有学习人家的开源的思想，比如nutch,然后再所以没有用文件作url的库，用的是mysql 5.0的innodb表，数据库中一共有12张表，分别是vUrls(以访问的url)，urls_0到urls_10(这11张表代表了11中不同权重的未访问的url)。（还是自己懒，写文件还要多代码，现在已经代码比较乱了）。<br /><br /><span style="color: red">表结构：</span><br /><span style="color: red">1.</span> 未访问表中有MD5和url字段，其中MD5字段是char(32)类型、主键，url是TEXT类型。<br /><span style="color: red">2.</span> 已访问表中有ID(自增、主键)，MD5和url（类型同上）<br /><br />操作主要集中在未访问表上，己访问表现在只是用来看看，程序中还是放在内存中。<span style="color: red">(以下未经说明针对未访问表)</span><br /><br />程序中开了多线程通过socket下载网页，一个线程专门解析hyberlink,一个线程专门储存网页（文件形式），开了11个线程（11个权重）并发将解析出来的超链存入数据库。<br /><br /><span style="color: red">1.</span> 存入数据库前，这些url先放入一个阻塞队列，满100个时，batch进数据库。<br /><span style="color: red">2.</span> 为了削去重复的url我在程序中使用了 replace语句，保证插入数据库的url是唯一的。<br /><span style="color: red">3.</span> 有两个队列轮流充满待访问的url共socket提取下载，当一个空的时候另一个从数据库中提取 <span style="color: red">&lt;100</span> 个url充满。这样轮流让socket线程提取，轮流充满，保证socket线程不断。这里的逻辑是从权重最大的表开始看看如果记录条数>0(select count(*))，就select...limit 100 ，只取一张表的数据，不管取出的记录有没有100个，有就行,然后根据MD5把这些记录删掉.程序稳定后（我指uv.url表中的数据量 > 100，最多也就程序运行开始后十几秒的事），就都是batch出100个了。<br /><br /><span style="color: blue">现在的问题是:</span><br />在下载了 <span style="color: red">>10^5</span> 张网页的时候（最大的权重url表中的行 <span style="color: red">>10^6</span>），数据库GRUD速度明显跟不上了，因为innodb是锁行的，所以一个时候并发的查询多的时候会锁较长时间，这时候线程会waiting,有次测试 ,竟然数据库被索直到timeout。<br /><br />然后自己看mysql的manual，优化，改了buffer-pool-size，又把死锁退出的时间调长了点，说实话，数据库这东西的优化是细活，硬活，而且我一直没存过海量，实在是看不出，也想不出什么好的优化方法。<br /><br />大家看看，都来讨论讨论。<br /><br /><span style="color: red">PS 1：</span> <br /><span style="color: red">1. </span>其实要是search一个区域的网站的话，比如我们学校的所有网站的所有网页，我想能下载下<span style="color: red">150000</span>张的网页，就够了吧（说错了 别扔我）。但是我想把毕设做得好些，想搞定网页数据量 <span style="color: red">10^6</span> 的（天网那群人写的那本什么书上写到原始的天网就单机下载索引了 <span style="color: red">10^6</span> 个网页）<br /><span style="color: red">2. </span>请问大家这样用数据库的方案可行不？(我指有教学性质的 单机版的 毕业设计式的 SE)<br /><br /><span style="color: red">PS 2：</span><br />我使用数据库做urlDB的原因其实就是与其自己写代码控制urlDB,不如相信数据库的能力，比如并发的管理，GRUD的优化能力 etc. 没想到现在竟然反被束缚了，其导致的后果就是网页的下载速度从占满带宽到由于数据库的查询访问而将到<span style="color: red"> &lt;20% </span>的地步。
          <br/>
          <span style="color:red;">
            <a href="http://waldenlake.javaeye.com/blog/139835#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 12 Nov 2007 00:02:55 +0800</pubDate>
        <link>http://waldenlake.javaeye.com/blog/139835</link>
        <guid>http://waldenlake.javaeye.com/blog/139835</guid>
      </item>
      <item>
        <title>多线程并发访问mysql 插入记录很慢</title>
        <author>waldenlake</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://waldenlake.javaeye.com">waldenlake</a>&nbsp;
          链接：<a href="http://waldenlake.javaeye.com/blog/137758" style="color:red;">http://waldenlake.javaeye.com/blog/137758</a>&nbsp;
          发表时间: 2007年11月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          手头正在写的程序中有多线程（线程数&lt;10）对数据库（用的jdbc但没用连接池）同时插入记录（每次&lt;2000条），同时隔一段时间还会提取一些记录。<br /><br />我们用的是固定大小的线程池（newFixedThreadPool），一个任务执行完了就复用一个线程执行另一个任务<br />因此 代码写成了这样：<br /><pre name="code" class="java">
final ExecutorService Gathers = Executors.newFixedThreadPool(gatherNum);
while(true)
{
    Gathers.execute(new Gather());
}
</pre><br /><br /><br />但是在测试中发现 即使将gatherNum设为1，对执行sql语句的程序做同步化 ，数据插入数据库的速度也很慢 有时1，2秒才插入一个记录<br />将多线程改为直接由main跑一次任务 记录很快插入数据库<br /><br />所以很疑惑<br /><br /><span style="color: red">PS:</span>执行sql语句的程序每个线程都会new一个 所以本来没想同步 但想问一下 我们对getcon,closestatment等等做了一个简单的包装 ，如果不对getcon作同步话的话  mysql会有什么反应？
          <br/>
          <span style="color:red;">
            <a href="http://waldenlake.javaeye.com/blog/137758#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 03 Nov 2007 13:29:34 +0800</pubDate>
        <link>http://waldenlake.javaeye.com/blog/137758</link>
        <guid>http://waldenlake.javaeye.com/blog/137758</guid>
      </item>
      <item>
        <title>不解的内存泄露(2)</title>
        <author>waldenlake</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://waldenlake.javaeye.com">waldenlake</a>&nbsp;
          链接：<a href="http://waldenlake.javaeye.com/blog/136991" style="color:red;">http://waldenlake.javaeye.com/blog/136991</a>&nbsp;
          发表时间: 2007年10月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          因为前面一个星期回家看病(都是coding)惹得祸 所以一直没上线<br /><br />所以前面的帖子就没看 <br />当然问题也没解决     <a href="http://www.javaeye.com/post/400274" target="_blank">http://www.javaeye.com/post/400274</a><br /><br />有朋友说MD5有问题 我觉得没有阿 还是贴下保险<br /><pre name="code" class="java">
/**
	 * @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 &lt; md5.length; i++)
		{
			String byteStr = Integer.toHexString(md5[i] & 0xFF);
			if(byteStr.length() &lt; 2) buff.append('0');
			buff.append(byteStr);
		}
		return buff.toString();
	}
</pre><br /><br />从jprofile的截图来看 <br />内存的占用集中在Page类的parseHyberlinks方法里面 而且是String没有释放<br /><span style="color: red">parseHyberlink方法见前贴</span><br /><br />整个程序的开始<br />是从<br /><pre name="code" class="java">
private void fetch()
	{
		while(true)
		{
			try
			{
				new FetchWeb().fetch();
			}
			catch (URISyntaxException e)
			{
				Log4j.logger.debug(e);
				e.printStackTrace();
			}
		}
	}</pre><br />开始<br />而在FetchWeb().fetch()中又调用了<br /><pre name="code" class="java">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");
	}</pre><br /><br /><span style="color: red">这个地方的程序有点逻辑不清 主要是当时匆匆忙忙做得 本想测试通过了在改 。。。</span><br /><br />addUrl的程序在前帖有<br /><br />我是这样想的 java的内存回收有点像重力场一样 对象没有东西引用了才会回收 但是jprofile的图显示从程序入口开始就一直占着内存 以至于我不能判断出到底是那出错了<br /><br />最初的判断是从parseHyberlink开始 返回一个url的集合然后将其加入没有访问的url集合，可能就是在这个过程中哪边的String引用没有释放<br />可能是在addurl()中 或者其他？<br /><br />我计算了下当时没访问的url的集合中共有100000个数量级的字段 一个字段估计是60个byte 一起就是大约10M数量级<br />当时已经下载了200M左右的网页数据<br />但是300min内就泄露了大概70M内存?到底是什么泄露了？由于parseHyberlink方法中一开始得出的link并不是都会加到集合中 而是必须是一个有效的url才行 这样的话 可能也许原始的links会有70M？<br />S H I T
          <br/>
          <span style="color:red;">
            <a href="http://waldenlake.javaeye.com/blog/136991#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 31 Oct 2007 14:22:03 +0800</pubDate>
        <link>http://waldenlake.javaeye.com/blog/136991</link>
        <guid>http://waldenlake.javaeye.com/blog/136991</guid>
      </item>
      <item>
        <title>不解的内存泄露</title>
        <author>waldenlake</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://waldenlake.javaeye.com">waldenlake</a>&nbsp;
          链接：<a href="http://waldenlake.javaeye.com/blog/135249" style="color:red;">http://waldenlake.javaeye.com/blog/135249</a>&nbsp;
          发表时间: 2007年10月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这边有个程序给改了之后发生了内存泄露<br />但是自己找不出原因<br />大家看看是哪出错了<br /><br />这是根据jprofile找出的内存使用不正常的代码<br /><br /><pre name="code" class="java">private ArrayList&lt;String> ParseHyperLinks() throws ParserException
	{
		ArrayList&lt;String> hyperLinks = new ArrayList&lt;String>();
		
		SimpleNodeIterator parseSimpleNodeIterator = null;
		if(getContentType().equalsIgnoreCase("text/html"))
		{
			
			try
			{
				Parser parse = new Parser(getHTMLEntity());
				parseSimpleNodeIterator = parse.parse(new TagNameFilter("A")).elements();
			}
			catch (ParserException e1)
			{
				Log4j.logger.debug(e1);
				e1.printStackTrace();
				throw new ParserException();
			}
			while(parseSimpleNodeIterator.hasMoreNodes())
			{
				String extractLink=new String();
				LinkTag link = (LinkTag) parseSimpleNodeIterator.nextNode();
				if(link.isHTTPLink())
				{
					 extractLink = link.extractLink().trim();
					// Log4j.logger.info(extractLink+"&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;");
					if(extractLink.startsWith("#")) continue;
					if(extractLink.startsWith("*")) continue;
					if(extractLink.equals("/")) continue;
					if(isFilterLink(extractLink)) continue;
					if(extractLink.contains(" ")) extractLink = extractLink.split(" ")[0];
					if(extractLink.length() > 6)
					{
						if(!extractLink.substring(0, 4).equals("http"))
						{
							if(!extractLink.startsWith("/")) extractLink = "/" + extractLink;
							extractLink = url + extractLink;
						}
					}
					if(extractLink.length() &lt;= 6)
					{
						if(!extractLink.startsWith("/")) extractLink = "/" + extractLink;
						extractLink = url + extractLink;
					}
					// Log4j.logger.info(">>>>>>>"+extractLink);
					hyperLinks.add(extractLink);
					extractLink=null;
				}
			}
		}
		return hyperLinks;
	}</pre><br /><br />下面是一个静态方法 我怀疑这里面有些引用在作怪<br /><br /><pre name="code" class="java">
public static boolean addUrl(String currentUrl, ArrayList&lt;String> Links)
	{
		Log4j.logger.info("robotsMap: "+RobotsTxtCache.robotsMap.size());
		currentUrl=currentUrl.trim();
		// first put the just url into the v. collection
		vUrlsMD5Collection.put(MD5Generator.generateMD5(currentUrl), currentUrl);
		ArrayList&lt;String> robotstxt;
		// process the hyberlinks
		for(int count=0;count&lt;Links.size();count++)
		{
			String hl=new String();
				hl=Links.get(count);

			if(!vUrlsMD5Collection.containsKey(MD5Generator.generateMD5(hl)))
			{
				int weight = 10;
				Url u = null;
				try
				{
					u = new Url(hl);
				}
				catch (URISyntaxException e)
				{
					e.printStackTrace();
					Log4j.logger.debug(e);
					return false;
				}
			
				System.out.println(">>>>>"+hl);
					weight = u.getPageWeigth(new BFSStrategy());
					uvUrlsCollection.get(weight).add(hl);

			}

		}
		Links.clear();
		Links.trimToSize();
		Links=null;
		return true;
	}
</pre><br /><br />测试的时候发现内存缓慢上升，曾经8小时后 内存时候用量突破500MB<br />一直不解是怎么回事，跟踪后发现了parseHyberlinks的调用栈有问题，但是反复研究代码又看不出那边有什么引用没去掉。郁闷中。。。
          <br/>
          <span style="color:red;">
            <a href="http://waldenlake.javaeye.com/blog/135249#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 24 Oct 2007 17:22:31 +0800</pubDate>
        <link>http://waldenlake.javaeye.com/blog/135249</link>
        <guid>http://waldenlake.javaeye.com/blog/135249</guid>
      </item>
      <item>
        <title>用socket抓取网页 建立连接后如何复用同一个socket?</title>
        <author>waldenlake</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://waldenlake.javaeye.com">waldenlake</a>&nbsp;
          链接：<a href="http://waldenlake.javaeye.com/blog/130335" style="color:red;">http://waldenlake.javaeye.com/blog/130335</a>&nbsp;
          发表时间: 2007年10月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>以下是程序<br />只能抓取前面一个网页 后面复用的不行 </strong><br /><br /><pre name="code" class="java">public class text
{
public static void main(String[] args) throws IOException
{
String hostname = "www.javaeye.com";
int port = 80;
InetAddress addr = InetAddress.getByName(hostname);
System.out.println(addr);
Socket s = new Socket(hostname, port);
// s.setSoTimeout(99999);
s.setKeepAlive(true);
if(s.getKeepAlive())
{
System.out.println("******************keep-alive*****************");
}
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
wr.write("GET / HTTP/1.1" + "\r\n" + "Host: www.javaeye.com" + "\r\n" + "Connection: Keep-Alive" + "User-Agent: tse" + "\r\n");
wr.write("\r\n");
wr.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line;
while((line = br.readLine()) != null)
{
System.out.println(line);
}
System.out.println(s.isClosed());

//以下想用复用同一个HOST＋port的socket,可是不行
wr.write("GET /search HTTP/1.0" + "\r\n" + "Host: www.javaeye.com" + "\r\n" + "Connection: Keep-Alive" + "User-Agent: tse" + "\r\n");
// wr.write("GET /");
// wr.write("HOST:" + hostname + "\r\n");
wr.write("\r\n");
wr.flush();
BufferedReader b = new BufferedReader(new InputStreamReader(s.getInputStream()));
String linee;
if(s.getInputStream().available()  > 0)
{
System.out.println("hava something");
}
while((linee = b.readLine()) != null)
{
System.out.println(linee);
}
}
}</pre>
          <br/>
          <span style="color:red;">
            <a href="http://waldenlake.javaeye.com/blog/130335#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 09 Oct 2007 23:34:23 +0800</pubDate>
        <link>http://waldenlake.javaeye.com/blog/130335</link>
        <guid>http://waldenlake.javaeye.com/blog/130335</guid>
      </item>
  </channel>
</rss>