前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >震惊!app为何会突然崩溃???

震惊!app为何会突然崩溃???

作者头像
程序亦非猿
发布2020-05-21 16:58:41
1.1K0
发布2020-05-21 16:58:41
举报
文章被收录于专栏:程序亦非猿程序亦非猿

王小虎看电影的app突然莫名崩溃?李二狗新买的手机为何无故变卡?

黑屏、死机,怪事频发,这一切的背后到底是设备的沦丧,还是程序员技术的扭曲?

Android技术优化日新月异,如今Android 10.0 已经发布,系统性能非常流畅,体验上完全可以媲美iOS;到了各大厂商手里,改源码、自定义系统,使得Android原生系统变得鱼龙混杂;再到不同层次的开发工程师手里,做出来的应用参差不齐,所以很多手机跑分软件上遥遥领先,打开应用依然会卡顿。

安卓手机卡顿、app崩溃、黑屏死机、OOM,主要是内存问题,罪不在Android系统,罪在开发APP的各位。

Android本身有自动管理内存的机制,但是对内存的不恰当使用很容易引起严重的性能问题。Android系统里面有一个Generational Heap Memory的模型,系统会根据内存中不同的内存数据类型分别执行不同的GC操作。

根据不同内存数据类型执行不同GC操作

执行GC操作的时候,任何线程的任何操作都会需要暂停,等待GC操作完成之后,其他操作才能够继续运行。(所以垃圾回收运行的次数越少,对性能的影响就越少)

导致GC频繁执行有两个原因:

1.Memory Churn内存抖动:内存抖动是因为大量的对象被创建又在短时间内马上被释放。

2.瞬间产生大量的对象会严重占用Young Generation的内存区域,当达到阀值,剩余空间不够的时候,也会触发GC。即使每次分配的对象占用了很少的内存,但是他们叠加在一起会增加Heap的压力,从而触发更多其他类型的GC。这个操作影响到帧率时,用户就会感知到性能问题。

如果你在Memory Monitor里面查看到短时间发生了多次内存的涨跌,这意味着很有可能发生了内存抖动;

同时我们还可以通过Allocation Tracker来查看在短时间内,同一个栈中不断进出的相同对象。这是内存抖动的典型信号之一。


内存泄露 memory leak

就是系统回收不了那些分配出去但是又不使用的内存, 形象点比喻就像家里的水龙头没有拧紧,漏水了。

内存泄漏分为:

常发性内存泄漏,偶发性内存泄漏,一次性内存泄漏,隐式内存泄漏。

隐式内存泄漏危害性非常大,因为较之于常发性和偶发性内存泄漏更难被检测到。

内存泄漏对程序造成的影响

1.直接:消耗内存,造成系统应用Out Of Memory.

一个android应用程序,其实就是一个jvm虚拟机实例,而一个jvm的实例,在初始的时候,大小不等 16M,32M,64M(根据手机厂商和版本不同而不同),当然大小也可以修改;

2.间接:gc回收频繁 造成应用卡顿ANR.

内存泄漏本身不会产生什么危害,一般用户,根本感觉不到。真正有危害的是内存泄漏的堆积,将会消耗系统所有的内存!随着程序的运行,可以使用的内存就会越来越少,机子就会越来越卡,直到内存数据溢出,然后程序就会挂掉,再跟着操作系统也可能无响应,接着你就按重启了…

手机变卡,就在所难免了。

要深入理解并提升Android性能优化技术,就需要我们深入理解JVM原理在移动端的实战应用。JVM原理是如何指导我们代码实践开发的?我们该如何从架构层面优化app性能?

太多的开发者对性能优化没有实际开发经验,这个是病得治,灵丹妙药就是项目实战!

为了解答这些疑问,我特邀我的好友,前东芝资深架构师Jett为大家带来《JVM核心原理与性能优化技术实战》,带你深度掌握JVM核心原理,并透过原理实现字节码插桩技术,以及常见内存问题的精准定位与分析处理,如抖动,泄漏等,掌握大厂项目中常用的开发与优化技术,很适合缺少一线互联网项目开发经验,渴望突破自己的安卓开发者。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序亦非猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档