zoukankan      html  css  js  c++  java
  • Android内存小谈

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

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

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

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

  • 相关阅读:
    ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(一) 整理基础数据
    Pod常使用命令
    教你用SingalR实现后台开发程序运行时时检测
    技术博客收藏
    ASP.NET SingalR 点对点聊天实现思路总结
    浅谈对MJRefresh(上)下拉刷新控件的理解
    redis持久化RDB和AOF
    redis的发布和订阅
    Linux下安装Redis
    python开发之virtualenv与virtualenvwrapper
  • 原文地址:https://www.cnblogs.com/Birdmafly/p/3687790.html
Copyright © 2011-2022 走看看