yufan.me/content/posts/2013/2013-11-25-the-poor-efficiency-of-android-program.mdx

35 lines
5.2 KiB
Plaintext
Raw Normal View History

2024-06-14 02:13:47 +08:00
---
title: 胡侃Android程序的效率
slug: the-poor-efficiency-of-android-program
date: 2013-11-25 13:03:59
updated: 2020-09-06 13:05:05
tags:
- Android
category: 编程
summary: 这天群里面大家都闲的时候某君开始吐槽Android上的UC游览器说以前版本的有多么快现在的内存占用多大、多卡。一看到这个话题我就十分感兴趣于是我就来胡扯一下Android上的程序效率问题非专业文章不喜勿看。
---
这天群里面大家都闲的时候某君开始吐槽Android上的UC游览器说以前版本的有多么快现在的内存占用多大、多卡。一看到这个话题我就十分感兴趣于是我就来胡扯一下Android上的程序效率问题非专业文章不喜勿看。
说起Android程序开发可谓是又爱又恨。想想我们当年写对应的项目开发的时候是有多复杂就往复杂里面写。后面实实在在接触了CPP然后会了析构才发现Java的性能就算发展10年也赶不上C、CPP然后对于UC的内存占用和效率就释然了。
Android程序用的是Java底层的JVMJava虚拟机其实是用C写的。╮(╯▽╰)╭ 一想到这个我很多时候就非常想笑。用一个性能优秀一点的语言Target指定然后解析一个性能差一点的语言的字节码这也算是跨平台的硬伤吧这就和python说自己比C还要快一样是个冷笑话。
而其实,解释一下跨平台和不跨平台的区别,你就能对于很多程序的性能就释然了。学过编译原理的可能会知道,一般指定平台的程序的编译流程是:词法分析->语法分析->语义分析->中间代码生成->中间代码优化->目标代码生成。
于是,程序在编译过程中会针对目标的平台进行相关优化,这样子的优点是程序的性能可能会更好,因为不同的平台可能说的指令集和中断调度算法都不一样,所以说编译程序时指定平台效率更高。(这里面细节我有兴趣时再说,涉及细节的计算机体系结构方面的知识。)
Java一类的跨平台语言比如还有python其本身的语法结构其实差不多尤其在数据类型那边基本一致。因为编程语言的规范基本也就是IEEE、MIT、ECMA规定它们的设计思想基本是编译到完整编译过程的中间代码部分中间代码是平台无关的一般是二进制文件。然后在通过平台相关的虚拟机运行中间代码。**所以说Java是跨平台的Java虚拟机不是。或者说Android程序是跨平台的但是Android系统不是。**正因为这一点也导致了Android程序的反汇编很容易破解也就自然不难了目前大一点的Android程序都要混淆加密虽然破解难度上升但不是不能破解只是运行效率不提也罢。
由于硬件架构硬件芯片不同。也就是解决方案不同MTK是完整打包整板但是高通不是不同手机之间的Android系统要指定编译。尤其是在目前开发基本用交叉编译的时候对应的虚拟机部分其实也是有区别优化的。所以所谓的Android深度定制其实本质就是对虚拟机进行指定平台相关的优化。
反过来继续说Android程序因为为了跨平台所以需要涉及虚拟机。一般的虚拟机都是用C写的本身虚拟机也为了最大化兼容已经丧失了一定的效率。然后再用这样子的低效率运行一个更加低效率的程序这就是Android程序的本质无奈。
所以外界永远不知道的一个我们程序员的真相就是,我们永远是在为未来写代码。因为我们的代码永远不可能高效最优,一个软件写得越久,就会越来越冗余,越来越低效。然后我们就会把责任推给硬件,然后硬件就发展了。然后大家就一直买新的设备,我们就乐得写越来越低效的软件。
但是这点在中国有点行不通。因为大家基本都是穷屌丝一台手机不可能年抛基本要用上个几年。所以才有了优化在中国的兴起。所以小米才会以优化定制为乐。但是这个的本质还是不行的小米以后手机出得越多架构越复杂的时候它的优化也就越来越难做。而做APP开发的也很难做一个是你的程序肯定会越做越复杂。目前的Android应用开发模式基本是Scum敏捷开发而不是以前的瀑布流周期短但是更新频繁。所以你所面对的程序优化就越来越难做。
程序写复杂了运行起来必定比以前慢然后那群消费者就不干了。没错新手机运行很流畅很好我们这群老用户呢然后就一群人开始骂骂咧咧然后应用站就开始刷新应用好卡、好慢、好烂负分、差评、滚粗。而其实Android的开发门槛真的很低做的基本是大专和本科核心的优化有真的不行。所以垃圾应用铺天盖地都是然后不赚钱于是有技术的也都懒得做了。
所以说在天朝硬件想换代难。所以逼着我们写垃圾代码写低效率软件然后逼着你换代升级。微软的Windows就是一个典型的例子。