hankcs / AhoCorasickDoubleArrayTrie

An extremely fast implementation of Aho Corasick algorithm based on Double Array Trie.
http://www.hankcs.com/program/algorithm/aho-corasick-double-array-trie.html
950 stars 290 forks source link

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

Open yuye2133 opened 5 years ago

yuye2133 commented 5 years ago

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

lyrachord commented 5 years ago

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

lyrachord commented 5 years ago

or use the option -XX:-UseGCOverheadLimit

yuye2133 commented 5 years ago

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

hankcs commented 5 years ago

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