继续咱们的lucene之旅,
今天结合jdbc把数据库中的内容建到倒排序索引文件去。使用jdbc的时候出现了一个疑惑,调了半天也没明白。
我有一个类 Db负责与数据库交互,在构造的时候建立数据库连接池,然后通过这个类的其他方法对数据库进行交互。
我有大概20万条表记录需要插到lucene的倒排序文件中,
然后思路很简单,我直接遍历数据库。
由于内存有限,我不可能直接读出整个数据库来索引,于是采取的分块进行。每次读出若干条,建索引,释放,然后读出下N条……
问题出现了,我发现不一会儿,java就内存溢出了!
仔细找了几遍代码,发现该释放的都释放了。。只是没有释放数据库连接池,于是我怀着很怀疑的态度,在每次处理一个块之后重建连接池,居然就没有溢出了!
按道理说数据库连接池不释放掉应该是不占查询内容的,只要将数据库查询的result释放就可以了,于是这个问题。。百思不得其解,先将代码贴上来,以后持续关注该问题。(这是每次释放,不会内存溢出的代码)
Db.class
调用相关代码