ArcGIS Java Map SDK是否存在内存泄漏?排查遇阻求助
问题:ArcGIS Java Map SDK v200.0.0本地内存泄漏排查求助
背景与现象
- 基于ArcGIS Java Map SDK v200.0.0开发GIS模块,核心流程为:连接Esri服务器拉取数据 → 计算处理 → 写入文件
- 测试发现每次执行计算后,虚拟内存持续攀升,最终导致应用崩溃,疑似存在内存泄漏
初步排查
- 排除JVM堆内存泄漏:通过VisualVM监控显示,堆内存使用正常,计算结束后无引用对象均被垃圾回收,元空间占用未超过50MB,判定为本地内存泄漏
- 排除文件流未关闭问题:写入文件的代码已正确关闭
FileWriter,相关代码如下:
// map here is an esri ArcGISMap object that holds some data and must be loaded fully map.addDoneLoadingListener(() -> { if (map.getLoadStatus() == LoadStatus.LOADED) { String mapJson = map.toJson(); FileWriter jsonFileWriter = null; try { // file here is a valid File already created jsonFileWriter = new FileWriter(file); jsonFileWriter.write(mapJson); mapDoneWriting = true; } catch (IOException e) { e.printStackTrace(); } finally { try { if (jsonFileWriter != null) { jsonFileWriter.flush(); jsonFileWriter.close(); } } catch (IOException e) { e.printStackTrace(); } } } else throw new IllegalArgumentException("Error writing json map file"); });
进一步排查结果
使用jemalloc替换JVM默认内存分配器,通过jeprof生成内存使用报告:
- 90%的内存占用来自
RT_Vector_setElementRemovedCallback - 其中70%与
lerc_decodeToDouble相关,但不确定该解读是否准确
求助问题
- 该情况是否属于Esri SDK自身的内存泄漏?
- 对jeprof内存报告的解读是否存在错误?
- 还有哪些可尝试的排查方向?
内容的提问来源于stack exchange,提问作者Jared Faulk
相关产品推荐
相关产品推荐

