安卓手机卡顿是有原因的,Android垃圾回收机制是根源!

安卓手机用户可能最大的感触就是用久了会很卡;然而苹果手机却不会出现这种现象,这也是国人为什么那么喜欢苹果的原因。很多人发现自己安卓手机的配置是超神级别的,可还是感觉苹果手机使用更加流畅。其实这一切都是有原因的。


安卓手机卡顿是有原因的,Android垃圾回收机制是根源!_第1张图片

官方解析是安卓系统是谷歌在Linux系统的基础上开发的一款移动操作系统,而安卓系统的应用程序则是在运行在一个基于Linux系统内核之上的虚拟机之中。
简单理解就是Linux系统开发的android系统,然后android系统的应用程序运行在Linux虚拟机上。而这个Linux虚拟机是谷歌开发的Java虚拟机,使用Java语言进行编码的。Java的跨平台性和兼容性非常好,但是Java的垃圾内存应用机制却成了移动设备上的局限。
说到垃圾回收机制,Android系统是用java语言编写的,那么java提供了自动的GC机制,系统会经常检查内存,采用对象引用计数的方式!所以寻根到底是GC机制问题。

什么是GC机制?

GC(Garbage Collection),是垃圾回收的意思,在程序开发的时候内存处理器是很容易出现问题的,忘记内存回收、错误内存回收都会导致应用程序崩溃,比如,你打开N多个安卓手机app,当使用达到内存分配时,系统就会弹出一个显示“程序无法响应,请手动关闭”这样的框。


安卓手机卡顿是有原因的,Android垃圾回收机制是根源!_第2张图片

Java语言的GC功能是自动检测对象是否超过作用域,从而达到自动回收内存和垃圾回收的目的。然而java语言并没有提供释放已分配内存的显示操作方法,导致编程不能准确地控制垃圾回收的时间。


安卓手机卡顿是有原因的,Android垃圾回收机制是根源!_第3张图片

什么是具体的Java内存垃圾回收原理?(有点复杂,小白可忽略)

Java的内存管理其实就是对象的管理,其中包括对像的分配和释放,对于编码来说,分配对象使用new关键字,释放对象时只是将对象赋值为null,让对象为空就不能够再访问到这个对象或者说这个对象没有任何的值了,那么该对象被称为“不可达”。GC将负责回收所有“不可达”对象的内存空间。
所以GC当创建新的对象时,GC就把对象地址、大小和使用情况都跟踪了一遍。是的,都跟踪了一遍,确实很浪费内存垃圾的出现。java规范对GC的很多行为都没有进行严格的规定。例如采用什么类型的回收算法、什么时候进行回收等问题都没有行业内的规定!
Ps:什么是对象?你可以简单这么理解。人就是一个“对象”,衣服,个性,姓名这些就是对象的属性。(小白可以忽略不看)


安卓手机卡顿是有原因的,Android垃圾回收机制是根源!_第4张图片

所以编码人员对于GC机制时都会有优化!比如减少GC开销的措施:
(1)少用 System.gc()
(2)对象使用完后,设置为指向null(设置为空)
(3)尽量少使用static变量。static 全局变量无法回收该内存

安卓手机卡顿是有原因的,Android垃圾回收机制是根源!_第5张图片

(4)StringBuffer比String好。String是字符串的意思
Ps:比如“中国电信”、“123456”等等就是字符串。String每赋值一次,就会重新分配一次内存,以此类推,总是这样的话就会导致内存分配过多了。
(5)能够用int等基本数据类型,就尽量不要使用Integer等引用类型。
Ps:int和Integer都是代表整数,比如1,2,3等1.2就是小数了。

简单理解什么是GC?

其实简单的理解就是系统中有一个特定的规则是来回收内存和垃圾的,当系统存在低于某个值时,会自动选择性的关闭程序。
有的程序会设置常驻内存之中,下次打开直接从内存中读取显示,这加快了打开速度。但是当运行大型软件或者很多软件时,就会内存不足而自动选择性关闭应用。然而总是着这样频繁访问读取内存,安卓手机用久了,就会卡顿了。

为什么苹果手机不会卡呢?

苹果手机的iOS系统其实没有所谓的垃圾回收机制,它和Mac系统类似,把内存分为自由(Free)、活跃(active)、空闲(inactive)、固定(wired)四个类型,然而这四种状态根据系统需要相互转化。比如当点击Home键返回桌面时,程序会被暂停,不会再运行。当需要打开是直接转化恢复。


安卓手机卡顿是有原因的,Android垃圾回收机制是根源!_第6张图片

对于苹果系统来说,系统优化和关后台是不需要的操作,清理效果、系统内存自我管理都是更加优化的。所以并没有安卓手机的卡顿问题,除非苹果手机的IOS版本更新增大了系统的内存,才会导致苹果手机的卡顿,比如用Iphone4手机更新IOS 10版本,也会出现手机不流畅的。
所以,其实安卓手机的GC垃圾回收机制的出现,就注定把安卓系统带到一个局限去了。无论安卓版本如何的更新换代,还是会导致内存不够的发生。

你可能感兴趣的:(安卓手机卡顿是有原因的,Android垃圾回收机制是根源!)