Lucene RAMDirectory 慎用

今天一哥们在做一个程序的时候使用了Lucene做全文检索工具,但是遇到了一个问题:首先就是检索速度非常的慢,而且只要连续检索三四次,程序马上就荡掉。通过日志发现是在CharacterEncodingFilter处报的错,没有办法只能去看filter的源代码。filter的程序很简单,只是做了request,response的编码,问题不可能出在这里啊!但是日志显示的错误信息就是从这个filter产生的,怎么回事?再看一下代码,晕:

try

{

// some code here

}

catch(Exception e)

{

//exception handling here

}

Exception太宽把底层错误屏蔽掉了,什么有价值的都看不到啊!把Exception改成IOException再试。Good 这次错误终于显示出来了:OutOfMemoryErr: Heap space

原来是内存耗尽了,好说!开始看代码中那些地方把内存吃掉了,改了一些地方(有个函数狂作字符串 +,改用StringBuffer,另外把一些循环中声明对象改为在循环开始...),重新启动服务器,这回应该没有问题了吧!OutOfMemoryErr: Heap space,日,怎么还是这个错误,再看...

终于找到了这块代码RAMDirectory ramDir = new RAMDirectory(fileName),不会是这里把内存都吃掉了吧!把这句注释掉,直接用文件方式,重起,测试,没有问题了!!!!!

看来这个RAMDirectory 是把整个索引文件的内容都放到内存中了,怪不得内存那么快就耗尽了。本来希望把文件放到内存中希望查询能快一点,没想到速度没加快反而找了不少麻烦!

仔细考虑了一下,要想使用RAMDirectory 把索引文件放到内存中不能每次查询时都重新打开RAMDirectory 。解决这个问题最好使用一个Singleton,在系统启动时把索引读到内存,查询时就直接使用。

本来是一个小问题,可是好长时间才解决,看来是经验不足,还需要锻炼!

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值