hankcs/AhoCorasickDoubleArrayTrie

词典数据超过300万的时候,会报GC overhead limit exceeded

yuye2133 opened this issue · 4 comments

RT,200万的时候,构建时间是91997ms,但300万的时候就开始报错了。然后修改了heap大小也没用,请问这个要怎么办啊。。

太多小对象了,考虑使用BufferedObject技巧,创建大缓冲区,将对象直接转换为字面值方式.这个与C中内存管理相似,此时对象使用int表示,所有操作在环境中执行,这个int可以解释为对象,此方式对于GC相当友好.可以找一下github上的项目HugeXXX

or use the option
-XX:-UseGCOverheadLimit

回复楼上,设置了xx不过没用,好像是源码里有个数组的大小,如果32位可以表示的话就很快,否则会变成64位表示,那就很慢了,最后还是直接缩小词典的量级了。。

目前的双数组实现的确会比较耗内存,可以考虑将常用字符映射为连续整数。