Skip to content

Conversation

xiaoheike
Copy link

原因:DynamicSynonymTokenFilterFactory.create() 方法并发,导致 dynamicSynonymFilters 中有数据丢失
要点:private Map<DynamicSynonymFilter, Integer> dynamicSynonymFilters = new WeakHashMap<DynamicSynonymFilter, Integer>(); --》 private List dynamicSynonymFilters = Collections.synchronizedList(new ArrayList<>());

原因:DynamicSynonymTokenFilterFactory.create() 方法并发
要点:private Map<DynamicSynonymFilter, Integer> dynamicSynonymFilters = new WeakHashMap<DynamicSynonymFilter, Integer>(); --》 private List<DynamicSynonymFilter> dynamicSynonymFilters = Collections.synchronizedList(new ArrayList<>());
@xinlmain
Copy link

@xiaoheike @bells 现在这个问题到底有没有修掉?为什么这个pr还open?

@lance23
Copy link

lance23 commented Apr 12, 2019

DynamicSynonymFilterList会不会越来越大,最终导致内存问题?
因为之前的代码用的是弱引用,gc的时候会被回收,不会产生内存问题。

@xiaoheike
Copy link
Author

DynamicSynonymFilterList会不会越来越大,最终导致内存问题?
因为之前的代码用的是弱引用,gc的时候会被回收,不会产生内存问题。

从现在的自己的技术水平来分析一下这个问题。首先要做成WeakHashMap也还是可以的,只是当时只想着解决问题没有到你提及的这个问题。WeakHashMap应该是在内存不够使用的时候才会被回收,如果被回收了,是不是就会有一部分同义词不起作用?如果同义词的数据非常庞大,实际上这个插件应该是无法支撑的,因为是一次性加载,估计得要本地缓存(配置容量、过期时间)+第三方存储(mysql、redis),实现动态加载

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants