Android java.util.concurrent.ConcurrentHashMap.get()抛出StackOverflower错误

Android java.util.concurrent.ConcurrentHashMap.get()抛出StackOverflower错误,android,stack-overflow,Android,Stack Overflow,在我的Android应用程序中,我使用ConcurrentHashMap。只需一个get操作,然后堆栈覆盖流 设备型号:NX511J 安卓操作系统:5.1.1 安卓SDK:22 以下是完整的堆栈跟踪: java.lang.StackOverflowError: stack size 1036KB (13000 same stack trace) at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(Concurrent

在我的Android应用程序中,我使用ConcurrentHashMap。只需一个get操作,然后堆栈覆盖流

设备型号:NX511J 安卓操作系统:5.1.1 安卓SDK:22

以下是完整的堆栈跟踪:

java.lang.StackOverflowError: stack size 1036KB

(13000 same stack trace)

  at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(ConcurrentHashMap.java:1507)
    at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(ConcurrentHashMap.java:1515)
    at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(ConcurrentHashMap.java:1515)
    at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(ConcurrentHashMap.java:1515)
    at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(ConcurrentHashMap.java:1515)
    at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(ConcurrentHashMap.java:1515)
    at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(ConcurrentHashMap.java:1515)
    at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(ConcurrentHashMap.java:1515)
    at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(ConcurrentHashMap.java:1515)
    at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(ConcurrentHashMap.java:1515)
    at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(ConcurrentHashMap.java:1515)
    at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(ConcurrentHashMap.java:1515)
    at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(ConcurrentHashMap.java:1515)
    at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(ConcurrentHashMap.java:1515)
    at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(ConcurrentHashMap.java:1515)
    at java.util.concurrent.ConcurrentHashMap$ForwardingNode.find(ConcurrentHashMap.java:1515)
    at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:754)
    at com.tmall.wireless.minsk.internal.store.impl.ConfigStoreImpl.c(ConfigStoreImpl.java:526)
    at com.tmall.wireless.minsk.internal.store.impl.ConfigStoreImpl.a(ConfigStoreImpl.java:461)
    at mwo.a(MinskImpl.java:265)
    at jfd.a(TMConfigCenterManager.java:186)
    at ogf.c(TMRewriteEngine.java:177)
    at ogf$1.run(TMRewriteEngine.java:141)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:818)
源代码(我认为这不是使用问题):

private final ConcurrentMap immutableLocalCache=new ConcurrentHashMap();
私有模块getFromLocal(字符串moduleName){
Module Module=immutableLocalCache.get(moduleName);//堆栈溢出
if(null!=模块){
返回模块;
}
//...
试一试{
Module ret=MinskDataConvertUtils.createMinskModule(数据);
immutableLocalCache.put(ret.name,ret);
返回ret;
}捕获(例外e){
LogUtils.例外(e);
返回null;
}
}

堆栈溢出的常见原因是循环中传递的错误递归调用或条件。通常,这是因为递归函数没有正确的终止条件,所以它会永远调用自己

可能是您正在迭代或使用递归来获取操作。如果使用循环,请检查您给定的条件。
仍然存在错误,然后发布代码。

能否发布代码以及一些上下文?很难从堆栈跟踪中说出发生了什么。@pablochan android 5.1.1,只是一个简单的get调用,没有什么不同在那个映射中有多少条目?映射中大约有210个键。我更新了源代码。实际上没有递归调用,您调用了getFromLocal methodcom.tmall.wireless.minsk.internal.store.impl.ConfigStoreImpl.c(ConfigStoreImpl.java:526)这一行。很难从堆栈跟踪中猜到,您能发布调用方法代码吗
private final ConcurrentMap<String, Module> immutableLocalCache = new ConcurrentHashMap<>();
    private Module getFromLocal(String moduleName) {
        Module module = immutableLocalCache.get(moduleName);// Stack over flow
        if (null != module) {
            return module;
        }
        //...
        try {
            Module ret = MinskDataConvertUtils.createMinskModule(data);
            immutableLocalCache.put(ret.name, ret);
            return ret;
        } catch (Exception e) {
            LogUtils.exception(e);
            return null;
        }
    }