当前位置: 首页 > 知识库问答 >
问题:

Android错误:i/dalvikvm-heap:将heap(frag case)增长到16.159MB(1490086字节)

云项禹
2023-03-14

我正在用for循环中的对象组成一个JSON文件
当传输到JSON文件的数据量增加时,我在logcat中看到以下错误:

I/dalvikvm-heap:将heap(frag case)增长到16.159MB,用于1490086字节的分配

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);
}
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个答案

潘翊歌
2023-03-14

堆可能有很多可用的内存,但分散在小块中。如果VM找不到足够大的块来分配您要做的事情,那么OOME就会发生。

 类似资料:
  • 我在从4X设备上传视频时遇到了问题。我知道在samsung S2中只有15秒的vedio重新编码将创建一个30 mb的文件,但当我试图在php服务器上首先上传视频时,它显示了如下消息:d/dalvikvm(7638):GC_FOR_ALLOC释放263K,9%空闲12838K/14087K,暂停13ms,总计13ms I/dalvikvm-heap(7638):Grow heap(frag情况)到

  • 堆是平衡二叉树数据结构的特例,其中根节点密钥与其子节点进行比较并相应地进行排列。 如果α有子节点β那么 - 键(α)≥键(β) 由于parent的值大于child的值,因此该属性会生成Max Heap 。 基于此标准,堆可以有两种类型 - For Input → 35 33 42 10 14 19 27 44 26 31 Min-Heap - 根节点的值小于或等于其子节点的值。 Max-Heap

  • import "container/heap" heap包提供了对任意类型(实现了heap.Interface接口)的堆操作。(最小)堆是具有“每个节点都是以其为根的子树中最小值”属性的树。 树的最小元素为其根元素,索引0的位置。 heap是常用的实现优先队列的方法。要创建一个优先队列,实现一个具有使用(负的)优先级作为比较的依据的Less方法的Heap接口,如此一来可用Push添加项目而用Pop

  • 一般情况下,堆通常指的是二叉堆,二叉堆是一个近似完全二叉树的数据结构,但由于对二叉树平衡及插入/删除操作较为麻烦,二叉堆实际上使用数组来实现。即物理结构为数组,逻辑结构为完全二叉树。子结点的键值或索引总是小于(或者大于)它的父节点,且每个节点的左右子树又是一个二叉堆(大根堆或者小根堆)。根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常被用作实现优先队列。 特点 以数组表示,但

  • 堆排序通常基于二叉堆 实现,以大根堆为例,堆排序的实现过程分为两个子过程。第一步为取出大根堆的根节点(当前堆的最大值), 由于取走了一个节点,故需要对余下的元素重新建堆。重新建堆后继续取根节点,循环直至取完所有节点,此时数组已经有序。基本思想就是这样,不过实现上还是有些小技巧的。 堆的操作 以大根堆为例,堆的常用操作如下。 最大堆调整(Max_Heapify):将堆的末端子节点作调整,使得子节点永

  • 本文向大家介绍Java Max Heap(堆),包括了Java Max Heap(堆)的使用技巧和注意事项,需要的朋友参考一下 最大堆是一个完整的二叉树,其中,每个步骤中根节点的值都大于或等于子节点中的值。 以下是使用库函数实现的Max Heap。 示例 输出结果 名为Demo的类,在主函数中,定义了优先级队列的实例,并使用“add”函数将元素添加到其中。定义了一个迭代器 用于迭代优先级队列中的元