• Android内存小谈


    先来想一个问题:如果一个应用内存占用超过了16M,而手机系统分配的最大内存只有15M,那么会有什么问题?

    没错,内存溢出,外在表现是手机卡死或者程序崩掉。当然,Android有一套自己的垃圾回收机制,当一些被引用的对象不再使用的时候就当做“垃圾”来处理,用GC(垃圾处理器)释放掉被占用的那部分内存。

    有时候我们会去主动分析一个应用的内存消耗情况,说到这就得赞一下Xcode,它可以直观的反应当前程序占用的cpu、内存的情况。而Eclipse则不那么直观,不过也有相应的内存监测工具,就是它自带的Heap工具,在DDMS模式下就可以看到。但是Heap只提供一个大概的统计数据,而不能够详细的说明到底是哪个地方占用或者消耗了较多的内存,我们只有对这个结果有一个全面的分析,才能对特定的代码进行优化操作。推荐一个Android下的内存泄露分析工具—Mat,只需要下载该插件,然后放到Eclipse的plugins目录下即可。

    那么GC怎么判断一个对象是否需要被释放呢?Java用了有向图的原理,简单滴说,就是如果从一个对象能到达根节点,那么它就是有效对象,GC不会回收,反之则认为是需要被释放的对象。因为我这个本上没装Mat插件,就不分析了,感兴趣的大家可以亲自试一下。但个人觉得不要手动去杀内存,毕竟Android有自己内在的垃圾回收机制,打破既定规则总免不了出现别的问题。

  • 相关阅读:
    PTA(Basic Level)1048.数字加密
    PTA(Basic Level)1037.在霍格沃茨找零钱
    PTA(Basic Level)1030.完美数列
    PTA(Basic Level)1047.编程团体赛
    PTA(Basic Level)1087.有多少不同的值
    PTA(Basic Level)1077.互评成绩计算
    PTA(Basic Level)1027.打印沙漏
    PTA(Basic Level)1029.旧键盘
    记录一次排查挖矿:快速跟踪一个进程
    JVM性能、多线程排查常用命令
  • 原文地址:https://www.cnblogs.com/Birdmafly/p/3687790.html
Copyright © 2020-2023  润新知