Java 将映射键集转换为字符串数组时出现OOM错误-Android
我有下面的课Java 将映射键集转换为字符串数组时出现OOM错误-Android,java,android,performance,hashmap,out-of-memory,Java,Android,Performance,Hashmap,Out Of Memory,我有下面的课 class Util { private static Map<String, String> params; public static String getSignedUrl(Context context) { params= null; // reset previous instance params= new HashMap<>(); ... addDefaultParams(); addCust
class Util {
private static Map<String, String> params;
public static String getSignedUrl(Context context) {
params= null; // reset previous instance
params= new HashMap<>();
...
addDefaultParams();
addCustomParams();
String signedUrl = getSignedUrl();
....
return signedUrl;
}
private static String getSignedUrl() {
String[] keyArray = params.keySet().toArray(new String[0]); // OOM error here!
.....
return signedUrl;
}
private static void addDefaultParams() {
//add some default params
params.add(key, value);
}
private static void addCustomParams() {
//add some custom params
params.add(key, value);
}
}
这是因为params
是一个静态字段吗?。但我正在重置params
的上一个实例,因此我不确定这会导致OOM问题
在此方面的任何帮助都将不胜感激。提前谢谢
编辑
堆栈跟踪
Fatal Exception: java.lang.OutOfMemoryError
Failed to allocate a 186909524 byte allocation with 16777216 free bytes and 262MB until OOM
java.lang.reflect.Array.createObjectArray (Array.java)
java.util.AbstractCollection.toArray (AbstractCollection.java:198)
.......
.......
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1133)
java.lang.Thread.run (Thread.java:760)
您可以向我们显示错误消息吗?在此处发布错误堆栈。无法添加整个堆栈跟踪,但添加了部分堆栈跟踪@deHaar@AmitTiwary编辑如果使用多个线程,则代码和数据将不是线程安全的。
Fatal Exception: java.lang.OutOfMemoryError
Failed to allocate a 186909524 byte allocation with 16777216 free bytes and 262MB until OOM
java.lang.reflect.Array.createObjectArray (Array.java)
java.util.AbstractCollection.toArray (AbstractCollection.java:198)
.......
.......
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1133)
java.lang.Thread.run (Thread.java:760)