我们使用以下代码创建了GroupByVisitor: -
GroupByVisitor visitor = new GroupByVisitorBuilder().withAggregateAttribute(CQL.toExpression(strColumn))
.withAggregateVisitor("Count").withGroupByAttribute(CQL.toExpression(strColumn)).build();
此时使用的内存为150-180Mb。 并在应用以下代码后: -
sfc.getFeatures().accepts(visitor, null);
visitor.getResult()
此点后内存超过1800Mb。但在此之后不会释放。 在得到所有值后如何释放内存?
偶System.gc();
没有释放所有内存。
答案 0 :(得分:2)
通过快速阅读GroupByVisitor,结果类GroupByResult可能拥有对GroupByVisitor成员的引用。
从代码的工作方式来看,只要您的代码包含对' getResult'返回的对象的引用,就会引用Visitor(及其数据结构)。
如果您能够从返回的对象中复制数据,然后在结果和访问者都有引用的上下文之外传递,JVM可能会收集内存。