You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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相关,但不确定该解读是否准确

求助问题

  1. 该情况是否属于Esri SDK自身的内存泄漏?
  2. 对jeprof内存报告的解读是否存在错误?
  3. 还有哪些可尝试的排查方向?

内容的提问来源于stack exchange,提问作者Jared Faulk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:12:54