由“<system class =”“loader =”“>”加载的“byte []”的一个实例占用29,393,296(40.58%)个字节

时间:2015-04-22 09:58:13

标签: java android eclipse analyzer eclipse-memory-analyzer

为什么?

  

如何解决? byte[] 需要设置 null?   Eclipse Memory Analyzer

enter image description here

1 个答案:

答案 0 :(得分:1)

对此问题的回答取决于代码,您在应用程序中如何使用#include <stdio.h> #include <stdint.h> typedef union { uint8_t array[8]; uint64_t u64; } my_type; int main() { my_type t = {0}; t.array[0] = 0x01; // how the array is actually allocated: for(int i=0; i<8; i++) // 0100000000000000 on all machines { printf("%.2X", t.array[i]); } printf("\n"); // how the array turns out when printed as a 64 bit int: printf("%.16llX\n", t.u64); // 0000000000000001 little endian // perhaps what you intended to do, on a little endian machine t.u64 <<= 63; printf("%.16llX\n", t.u64); // 8000000000000000 little endian return 0; }

如何解决?

  • 在您的应用程序中签入初始化byte[]
  • 数组的位置
  • 在循环迭代中重用数组元素
  • 在不使用数组引用时将其取消

使用标记byte检查logcat消息并运行您的应用程序。检查

的位置
  

D / dalvikvm(28039):GC_CONCURRENT释放473K,7%免费9503K / 10180K,暂停2ms + 3ms,总计22ms

在这里,注意字段 -

  1. 7%免费 9503K / 10180K -
  2.   

    9503K 是在我们的应用程序中保存实时对象引用的数量。当您在应用程序中遍历时,此值将为   长大。这个是正常的。但并行GC也正在运行并尝试   释放没有强关联的资源/对象引用。   如果您没有找到值 9503K ,那么这是警告我们。   这是我们的应用肯定会泄漏内存的信号。

    有关内存优化的详细信息,请检查Google IO video for memory optimization and using mat tool of eclipse