原帖由 @KARUTO 于 2017-6-29 18:35 发表
安卓为了当初的全世界大同计划,采用的JAVA为其应用层的实现方式,而java都是跑在JVM就是java虚拟机里面的。
而且Google自己搞了一套什么所谓的Dalvik virtual machine,这玩意儿效率更低,要打水果的应用,光靠纯虚拟机不行,怎么办呢,Google就在Dalvik里搞了个JNI,所谓的java原生介面,来和其他语言的函数库(主要是c和c++互通),所以基本上JNI在大型游戏和重度应用里早就用的很常见,不过这个只是调用运行层面的东西,JAVA还有一大特点就是程序载入JVM的时候非常缓慢而且消耗大量内存,所以安卓机器祖传普遍需要大内存不足为奇。再者,所谓的调用效率也是可圈可点,以下是别人做的测试。
JNI调用和C++直接调用测试,均for循环1,000,000,000次
JNI调用耗时:6,000ms 6.0ns/次
C++调用耗时:1,400ms 1.4ns/次
单次的时间差应该体现了JNI调用dll的额外时间损耗。这个简单函数的调用效率,C++是JNI的4~5倍。
原帖由 @lewx 于 2017-6-29 20:18 发表
正常使用差距在纳秒级别?
原帖由 @asac 于 2017-6-29 20:44 发表
iPhone用什么语言开发?
原帖由 @wangmax 于 2017-6-30 11:20 发表
6以后强制ART,安卓现在也是机器码。
原帖由 @KARUTO 于 2017-6-28 22:35 发表
安卓为了当初的全世界大同计划,采用的JAVA为其应用层的实现方式,而java都是跑在JVM就是java虚拟机里面的。
而且Google自己搞了一套什么所谓的Dalvik virtual machine,这玩意儿效率更低,要打水果的应用,光靠纯虚拟机不行,怎么办呢,Google就在Dalvik里搞了个JNI,所谓的java原生介面,来和其他语言的函数库(主要是c和c++互通),所以基本上JNI在大型游戏和重度应用里早就用的很常见,不过这个只是调用运行层面的东西,JAVA还有一大特点就是程序载入JVM的时候非常缓慢而且消耗大量内存,所以安卓机器祖传普遍需要大内存不足为奇。再者,所谓的调用效率也是可圈可点,以下是别人做的测试。
JNI调用和C++直接调用测试,均for循环1,000,000,000次
JNI调用耗时:6,000ms 6.0ns/次
C++调用耗时:1,400ms 1.4ns/次
单次的时间差应该体现了JNI调用dll的额外时间损耗。这个简单函数的调用效率,C++是JNI的4~5倍。
原帖由 @jun4rui 于 2017-6-30 23:28 发表
少年你这个数据都不对啊,Dalvik是几代以前的东西了
原帖由 @KARUTO 于 2017-6-30 03:55 发表
自己打脸了吧,art说白了就是预编译过后的dalvik,少了一次装载标准,但是效率并没比dalvik 有质的提升,还是虚拟机构架,而且感谢你的论据让大家可以看得更清楚
原帖由 KARUTO 于 2017-7-1 00:51 发表
posted by wap, platform: iPhone
Dalivk 本身就有jin 啊,执行层真的效率不行,art 编译并没有多大改变,而且art编译并不改变程序结构,本质还是要调用runtime
ART会把apk的代码编译成二进制程序,但是光有这个 ...
原帖由 wangmax 于 2017-7-1 09:49 发表
你概念不对了。
不要把runtime定义为低效,iOS底层也是runtime,oc是动态语言,在调用时会通过runtime转换成c的。
原帖由 @帝斯特罗 于 2017-7-2 10:37 发表
虚片和很久以前说PS3虚拟内存的是一个人吗?
欢迎光临 TGFC Lifestyle (http://club.tgfcer.com/) | Powered by Discuz! 6.0.0 |