我在目前正在处理的项目中遇到了奇怪的行为。我所看到的是,当我直接引用InternalSearchHit.sourceAsMap时,我遇到了内存泄漏。代码正在进行一些图遍历,因此也有对其他InternalSearchHit.sourceAsMap文档的引用。
我目前正在编写groovy代码,所以我所看到的部分内容是:
def docMap = hit.sourceAsMap()
//Add data into hash map
//Add other InternalSearchHit.sourceAsMap as child of map
我最终导致内存泄漏。
如果我使用HashMap构造函数复制地图:
def docMap = new HashMap(hit.sourceAsMap())
//Add data into hash map
//Add other InternalSearchHit.sourceAsMap as child of map
然后内存泄漏就消失了。
我看了一下InternalSearchHit的来源,我没有看到任何明显的东西。我最多可以猜到的是,引用sourceAsMap对象会保留对SearchHit的保留,而后者又会保留其他内容。