美文网首页
2018-07-06 - 草稿

2018-07-06 - 草稿

作者: 蒸汽飞船 | 来源:发表于2018-07-08 17:20 被阅读4次

在没有JIT(Just In Time Compiler)时,直接访问变量的速度是调用getter的3倍。有JIT时,直接访问变量的速度是通过getter访问的7倍。

使用ArrayList时,for-i循环会快3倍(不管有没有JIT),但是对于其他collection,增强的for-each循环写法会和迭代器写法的效率一样。

Android系统中float类型的数据存取速度是int类型的一半,尽量优先采用int类型。
就速度而言,现代硬件上,float 和 double 的速度是一样的。空间而言,double 是两倍float的大小。在空间不是问题的情况下,你应该使用 double 。
同样,对于整型,有些处理器实现了硬件几倍的乘法,但是没有除法。这时,整型的除法和取余是在软件内部实现的,这在你使用哈希表或大量计算操作时要考虑到。

为了能够接收到用户离开你的UI时的通知,你需要实现Activtiy类里面的onTrimMemory()回调方法。你应该使用这个方法来监听到TRIM_MEMORY_UI_HIDDEN级别的回调,此时意味着你的UI已经隐藏,你应该释放那些仅仅被你的UI使用的资源。

  1. 当内存紧张时释放部分内存

在你的app生命周期的任何阶段,onTrimMemory的回调方法同样可以告诉你整个设备的内存资源已经开始紧张。你应该根据onTrimMemory回调中的内存级别来进一步决定释放哪些资源。

TRIM_MEMORY_RUNNING_MODERATE:你的app正在运行并且不会被列为可杀死的。但是设备此时正运行于低内存状态下,系统开始触发杀死LRU Cache中的Process的机制。
TRIM_MEMORY_RUNNING_LOW:你的app正在运行且没有被列为可杀死的。但是设备正运行于更低内存的状态下,你应该释放不用的资源用来提升系统性能(但是这也会直接影响到你的app的性能)。
TRIM_MEMORY_RUNNING_CRITICAL:你的app仍在运行,但是系统已经把LRU Cache中的大多数进程都已经杀死,因此你应该立即释放所有非必须的资源。如果系统不能回收到足够的RAM数量,系统将会清除所有的LRU缓存中的进程,并且开始杀死那些之前被认为不应该杀死的进程,例如那个包含了一个运行态Service的进程。
同样,当你的app进程正在被cached时,你可能会接受到从onTrimMemory()中返回的下面的值之一:

TRIM_MEMORY_BACKGROUND: 系统正运行于低内存状态并且你的进程正处于LRU缓存名单中最不容易杀掉的位置。尽管你的app进程并不是处于被杀掉的高危险状态,系统可能已经开始杀掉LRU缓存中的其他进程了。你应该释放那些容易恢复的资源,以便于你的进程可以保留下来,这样当用户回退到你的app的时候才能够迅速恢复。
TRIM_MEMORY_MODERATE: 系统正运行于低内存状态并且你的进程已经已经接近LRU名单的中部位置。如果系统开始变得更加内存紧张,你的进程是有可能被杀死的。
TRIM_MEMORY_COMPLETE: 系统正运行与低内存的状态并且你的进程正处于LRU名单中最容易被杀掉的位置。你应该释放任何不影响你的app恢复状态的资源。
因为onTrimMemory()的回调是在API 14才被加进来的,对于老的版本,你可以使用onLowMemory)回调来进行兼容。onLowMemory相当与TRIM_MEMORY_COMPLETE。

Note: 当系统开始清除LRU缓存中的进程时,尽管它首先按照LRU的顺序来操作,但是它同样会考虑进程的内存使用量。因此消耗越少的进程则越容易被留下来。

检查你应该使用多少的内存
正如前面提到的,每一个Android设备都会有不同的RAM总大小与可用空间,因此不同设备为app提供了不同大小的heap限制。你可以通过调用getMemoryClass())来获取你的app的可用heap大小。如果你的app尝试申请更多的内存,会出现OutOfMemory的错误。

相关文章

  • 2018-07-08

    2018-07-06 c6_李晓红Dorothy 2018-07-06 07:11 · 字数 191 · 阅读 0...

  • 2018-07-06 - 草稿 - 草稿

    我陪闺蜜陈婧去做药流了。 做这个决定之前,陈婧让我咨询我的医生朋友,想知道做流产的一些细节和一些危害,医生朋友建议...

  • for vue - 2018-07-06

    2018-07-06 创建.eslintrc.js

  • 2018-07-06 - 草稿

    6好亲爱的家人们,我们来开始今天的分享三为一体,三位一体指的就是你。就是你,我们在前面通过了几堂课跟大家去讲了心外...

  • 2018-07-06 - 草稿

    人力资源服务 指提供公共就业,职业中介,劳务派遣,职业技能鉴定,劳动力外包等服务。 公共就业服务指向劳动者提供公益...

  • 2018-07-06 - 草稿

    最近在和小孩打交道,好可爱啊,每天看着这群小可爱心情也很好,我的姨母心~ 这个小朋友是王子涵。哈哈,和我同学重名,...

  • 2018-07-06 - 草稿

    在没有JIT(Just In Time Compiler)时,直接访问变量的速度是调用getter的3倍。有JIT...

  • 转载 -《管理自己》-《Managing Oneself》

    title: "转载 -《管理自己》-《Managing Oneself》"date: 2018-07-06 14...

  • (码友推荐)2018-07-06 .NET及相关开发资讯速递

    (码友推荐)2018-07-06 .NET及相关开发资讯速递: 1.Dotnet outdated helps y...

  • 草稿

    草稿不是草稿

网友评论

      本文标题:2018-07-06 - 草稿

      本文链接:https://www.haomeiwen.com/subject/drpvuftx.html