我正在用for循环中的对象组成一个JSON文件
当传输到JSON文件的数据数量增加时,我在Logcat中看到以下错误:
I / dalvikvm-heap:将堆(frag大小写)增加到16.159MB,以获得1490086字节 分配
这是怎么了?
我已经验证了Grow heap (frag case)
上的其他帖子,但没有结果!
是什么在增加堆大小,从而导致这种错误?
循环代码:
JSON_Functions_PRD mJSONF_Test = new JSON_Functions_PRD();
JSONObject obj = new JSONObject();
String Temp;
Temp = obj.toString();
mJSONF_Test.setJSONobj_PRD(Temp);
mJSONF_Test.CreateMenu_SMS_Naked();
A_DataClass m_DataClass = new A_DataClass();
int count = 10000;
for (int i = 0; i < count; i++)
{
mDataClass.setA("A1");
mDataClass.setB("B1");
mJSONF_Test.setItem_M0(mDataClass);
}
JSON函数:
public class JSON_Functions_PRD {
String mJSONString_Result;
JSONObject obj = new JSONObject();
public void setJSONobj_PRD(String mJSONString) {
try {
mJSONString_Result = mJSONString;
obj = new JSONObject(mJSONString_Result);
} catch (JSONException e) {
e.printStackTrace();
}
}
public String getJSON_PRD() {
mJSONString_Result = obj.toString();
return mJSONString_Result;
}
public void CreateMenu_SMS_Naked() {
JSONArray jA1 = new JSONArray();
try {
obj.put("M0", jA1);
} catch (JSONException e) {
e.printStackTrace();
}
}
public void setItem_M0(A_DataClass Item) {
JSONArray jA1 = new JSONArray();
JSONObject jO1 = new JSONObject();
JSONObject jO2 = new JSONObject();
try {
jA1 = obj.getJSONArray("M0");
jO1.put("a", Item.getA());
jO2.put("a", Item.getB());
jO1.put("b", jO2);
jA1.put(jO1);
} catch (JSONException e) {
e.printStackTrace();
}
}
数据类:
public class A_DataClass {
String A;
String B;
public A_DataClass()
{
}
public String getA() {
return A;
}
public void setA(String name) {
thisA = name;
}
public String getB() {
return B;
}
public void setB(String name) {
this.B = name;
}
}
编辑:
我应该补充一点,就是我在3台移动设备(2台三星设备,1台华为设备)上测试了该案例,问题仅在华为身上出现
答案 0 :(得分:0)
堆可能有很多可用的内存,但会分成小块。如果VM找不到足够大的块供您尝试分配,则会发生OOME。