性能优化——内存优化(2)
来源:互联网 发布:乐知英语的公司在哪 编辑:程序博客网 时间:2024/04/19 23:40
http://blog.csdn.net/guolin_blog/article/details/42238633
虽说现在的手机内存都已经非常大了,但是我们大家都知道,系统是不可能将所有的内存都分配给我们的应用程序的。没错,每个程序都会有可使用的内存上限,这被称为堆大小(Heap Size)。不同的手机,堆大小也不尽相同,随着现在硬件设备不断提高,堆大小也已经由Nexus One时的32MB,变成了Nexus 5时的192MB。如果大家想要知道自己手机的堆大小是多少,可以调用如下代码:
ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); int heapSize = manager.getMemoryClass();
结果是以MB为单位进行返回的,我们在开发应用程序时所使用的内存不能超出这个限制,否则就会出现OutOfMemoryError。因此,比如说我们的程序中需要缓存一些数据,就可以根据堆大小来决定缓存数据的容量。
下面我们来讨论一下Android的GC操作,GC全称是Garbage Collection,也就是所谓的垃圾回收。Android系统会在适当的时机触发GC操作,一旦进行GC操作,就会将一些不再使用的对象进行回收。那么哪些对象会被认为是不再使用,并且可以被回收的呢?我们来看下面一张图:
上图当中,每个蓝色的圆圈就代表一个内存当中的对象,而圆圈之间的箭头就是它们的引用关系。这些对象有些是处于活动状态的,而有些就已经不再被使用了。那么GC操作会从一个叫作Roots的对象开始检查,所有它可以访问到的对象就说明还在使用当中,应该进行保留,而其它的对象就表示已经不再被使用了,如下图所示:以看到,目前所有黄色的对象仍然会被系统继续保留,而蓝色的对象就会在GC操作当中被系统回收掉了,这大概就是Android系统一次简单的GC流程。
那么什么时候会触发GC操作呢?这个通常都是由系统去决定的,我们一般情况下都不需要主动通知系统应该去GC了(虽然我们确实可以这么做,下面会讲到),但是我们仍然可以去监听系统的GC过程,以此来分析我们应用程序当前的内存状态。那么怎样才能去监听系统的GC过程呢?其实非常简单,系统每进行一次GC操作时,都会在LogCat中打印一条日志,我们只要去分析这条日志就可以了,日志的基本格式如下所示:
D/dalvikvm: <GC_Reason> <Amount_freed>, <Heap_stats>, <Pause_time>
0 0
- 性能优化——内存优化(2)
- Android性能优化——内存优化
- 性能优化——Android内存优化
- Android性能优化——内存优化
- Android性能优化——内存优化
- Android性能优化——内存优化
- 安卓性能优化—内存优化
- Lua性能优化—Lua内存优化
- 性能优化——内存优化(1)
- 性能优化——内存优化建议(RAM)
- 性能优化—内存泄漏
- Android性能优化——渲染、内存、电源优化
- Android性能优化——内存泄漏优化
- Android 性能优化之——内存优化
- 【Android 性能优化】—— 详解内存优化的来龙去脉
- 【Android 性能优化】—— 详解内存优化的来龙去脉
- 【Android 性能优化】—— 详解内存优化的来龙去脉
- 【Android 性能优化】—— 详解内存优化的来龙去脉
- Input_poj1262_计算几何
- why what how???
- MD5加密
- 【noip2014】tyvj 4056飞扬的小鸟
- 封装
- 性能优化——内存优化(2)
- JS常见对象方法小结
- MATLAB 神经网络模板
- 【Hive】Hive0.13.1的安装及Hive运行RuntimeException Cannot make directory错误的解决
- 触发器
- IntentServcie实现分析
- 73. Set Matrix Zeroes
- Light oj 1003 - Drunk(拓扑排序, DAG)
- Python 网络爬虫 001 (科普) 网络爬虫简介