我们使用以下代码创建了一个 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();
也没有释放所有内存。
最佳答案
通过快速阅读 GroupByVisitor,结果类 GroupByResult 可能包含对 GroupByVisitor 成员的引用。
从代码的工作方式来看,只要您的代码持有对“getResult”返回的对象的引用,就会存在对访问者(及其数据结构)的引用。
如果您能够从返回的对象中复制数据,然后将结果和访问者引用的上下文传递出去,JVM 可能会收集内存。
关于java - GetFeatures Geotools后释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42487095/