java比ios慢_Android为什么比iOS慢

有些人会觉Android应用没有iOS应用使用得流畅,我觉得主要原因有以下几点:

第一,因为Android平台相较于iOS起步晚,平台不成熟,初期的开发者水平也有限,没有很关注性能优化,只是想做出可用的应用,而未做出好用的应用。

第二,Android相对比较开放,让开发者发挥的空间比较大。比如开发后台永生进程、肆意搜集手机使用信息等这些会影响手机整体性能的行为理论上都是可以做得到,所以有些开发者就利用这种开放性,不顾用户体验,做了很多上不了台面的小动作,导致手机整体使用体验被拖累。

第三,Dalvik运行时机制导致了Android应用相对iOS会慢一些,所以Android团队在4.4版本后使用Art运行时替代了Dalvik,下面我们详细分析下为什么Dalvik运行时会导致慢。

Android是基于Java语言的,iOS是基于Obejctive-C。表现在手机和应用程序运行机制上,Java的代码实际上需要 两次“转换”才能最终以用户可看的程序跑起来,一次发生在开发者发布安装包前,使用开发者自己机器的CPU,另一次在用户启动APP前,使用手机的 CPU。而基于Objective-C的代码只需要一次这种“转换”,在开发者发布安装包前,所以只占用开发者机器的CPU时间。

在编译Android程序时,首先java代码被编译成class文件,然后被java打包工具dx打包成.dex文件, Dex是DalvikVM executes的简称,即Android Dalvik执行程序。然后.dex文件和资源文件一起被压缩成apk文件。APK其实也是zip格式,只是后缀被修改为了apk。Android应用安装过程:复制APK安装包到data/app目录下,解压并扫描安装包,把dex文件(Dalvik字节码)保存到dalvik-cache目录,并data/data目录下创建对应的应用数据目录。这样每次用户点击图标运行android程序时,dalvik虚拟机就会用JIT的方法把dex文件翻译为机器码执行。虽然Dalvik虚拟机已被做过很多优化,但因为此种机制的存在,所以Android在电量消耗和程序运行流畅程度上一直不敌iOS。

Android 4.4版本后这种情况会有很大改观,Android 4.4采用ART模式,可以在用户第一次安装应用时,字节码就会预先编译成机器码,使其成为真正的本地应用。不过也因为这一点,一个应用会占用更大的rom空间,第一次安装时间也会变长。但它带来的好处是远远大于这些缺点的。

以下是Art和Dalvik的对比图

28cdc90b456f

Dalvik和Art模式区别

上文只代表一家言论,欢迎大家吐槽。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rdd转换成java数据结构_如何将CSV文件转换为RDD

一种简单的方法是拥有一种保留标头的方法。假设您有一个file.csv,例如:user, topic, hitsom, scala, 120daniel, spark, 803754978, spark, 1我们可以定义一个标头类,该标头类使用第一行的解析版本:class SimpleCSVHeader(header…

output怎么用_如何用 C++ 写一个可编程软件渲染器?

今天你想用最新的 D3D12 画一个三角形,少说也要上千行代码了,对于初学者来讲,这个门槛是非常高的,太多干扰了,而一千多行代码,已经足够你重头实现一个简易版 D3D 了,为什么不呢?比起…

java finereport_java报表工具FineReport常见的数据集报错错误代码和解释

在使用finereport制作报表,若预览发生错误,很多朋友便手忙脚乱不知所措了,其实没什么,只要看懂报错代码和含义,可以很快的排除错误,这里我就分享一下finereport的数据集报错错误代码和解释,如果…

python定义一个人类_Python类的定义、继承及类对象使用方法简明教程

Python编程中类的概念可以比作是某种类型集合的描述,如“人类”可以被看作一个类,然后用人类这个类定义出每个具体的人——你、我、他等作为其对象。类还拥有属性和功能,属性即类本身的一些特性,如人类有名字、身高和体重等属性&a…

android 反色 java_Android小米,魅族6.0状态栏不能反色解决方法

Android6.0及以上if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {Window window getWindow();window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(getResources().getColor(android.R.color.white));window.…

mysql delete语句_MySQL ------ 触发器(TRIGGER)(二十七)

MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来触发器:某个表发生更改时自动处理。触发器是MySQL响应delete,insert&…

aws mysql价格_mysql – AWS RDS“转出”成本有多贵?

我在AWS上托管了一个社交网络网站.我是否会因RDS的“转移成本”而被收取费用(因为RDS将通过AWS连接到EC2)?这是否意味着我只需支付EC2’转账费用’?与“图像”带宽相比,“数据库”带宽有多贵?真的很感激任何输入.谢谢.解决方法:根据AWS文档,从…

python变量定义大全_详解python变量与数据类型

这篇文章我们学习 Python 变量与数据类型变量变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念,变量可以通过变量名访问。在 Python 中 变量命名规定,必须是大小写英文,数字和 下划线(_)的组合,并且不能…

java 数据库改操作_数据库的插入、修改、删除操作(java实现)

import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class JDBCTest {// 定义数据库访问参数String url "jdbc:sqlserver://localhost:1433; DatabaseNamelihongchao&…

python3安装pywin32_Python3 pywin32模块安装的详细步骤

python新手一枚,操作系统Win10 64 bit,Python版本,3.7因为某个脚本需要用到win32con 和win32api模块,run -- cmd ,使用easy_install pywin32 命令安装,提示错误,搜不到,网上搜了下教程&#x…

创建时间指定日期 java,Java避坑之如何创建指定时间Date对象

在翻看自己以前写的惨不忍睹的代码时,发现了自己曾经写的一个跟Date有关的坑。Date date new Date(2020, 1, 1);System.out.println(date);我的目的是想创建一个2020年1月1日的时间对象date,但是我们创建的date真的就代表2020年1月1日吗?错&…

pagerank数据集_从数据结构到算法:图网络方法初探

机器之心原创作者:朱梓豪编辑:Qing Lin如果说 2019 年机器学习领域什么方向最火,那么必然有图神经网络的一席之地。其实早在很多年前,图神经网络就以图嵌入、图表示学习、网络嵌入等别名呈现出来,其实所有的这些方法本…

php curl上传文件返回false,php curl上传文件$_FILES为空的问题

PHP 5.0~5.6 各版本兼容的cURL文件上传最近做的一个需求,使用PHP cURL上传文件。踩坑若干,整理如下。不同版本PHP之间cURL的区别PHP的cURL支持通过给CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求。传统上,…

python判断几个数最大最小_python 找出list中最大或者最小几个数的索引方法

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

netty 客户端断开 异常处理_netty案例,netty4.1基础入门篇八《NettyClient半包粘包处理》发数据方式》...

小傅哥 | https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获。专注于原创专题案例编写,目前已完成的专题有;Netty4.x实战专题案例、用Java实现JVM、基于JavaAgent的全链路监控、手写RPC框架、架构设计专题案例、源码分析等。你…

Java Windows注销用户,中止Windows从Java注销

EDIT2对于那些跟随讨论的人,我留下了我的第一个答案,但似乎他们没有工作。首先找到我的真正解决方案好吧,所以我认为这实际上有效,但它并不完全可以接受,因为它使用了受限制的API部分(但它自Java 1.3以来就存在并且仍然…

python generator_Python Generator漫谈

作为一个Python初学者, Python的格式化语法让众多编程小白追捧, 它的语法糖让代码变得简洁易读,它的庞大开源库让它在各个领域都能发挥作用. 但我时常感受到这个门槛极低的语言远没有表面上看起来易懂易用. 在Python的学习之路上, 我也时常迷茫于自己是否真正掌握了…

php5.5 连接数据库,php5.5 session_set_save_handler 连接数据库问题

好久前忘了在什么地方抄来的,一直好用,但是升级到PHP5.5就不好用了 出现警告服务器无法修改PHP.ini 只好自己试着用mysqli写 但是一直写不出来 请高手指教!!谢谢回复讨论(解决方案)把 mysql_ 都改成 mysqli_>把 mysql_ 都改成 …

python获取屏幕文字_详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)...

前言:今天为大家带来的内容是详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)本文具有不错的参考意义,希望能够帮助到大家!Python获取电脑截图有多种方式,具体如下:1. PIL中的ImageGrab模块2. wi…

支付宝php异步回调,支付宝支付成功之后异步回调处理

/*** alipay_notify.php.* User: lvfk* Date: 2017/10/26 0026* Time: 13:48* Desc: 支付宝支付成功异步通知*/include_once (__DIR__./../alipay-sdk-PHP-20171023143822/AopSdk.php);//验证签名$aop new \AopClient();$aop->alipayrsaPublicKey \Comm\Pay\Alipay::ALIPA…