Android错误:I / dalvikvm-heap:将堆(frag大小写)增加到16.159MB,以获得1490086字节

时间:2019-01-09 13:21:25

标签: android heap

我正在用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台华为设备)上测试了该案例,问题仅在华为身上出现

1 个答案:

答案 0 :(得分:0)

堆可能有很多可用的内存,但会分成小块。如果VM找不到足够大的块供您尝试分配,则会发生OOME。