android虚拟机和java虚拟机_安卓已经如此成功,为什么还不放弃Java虚拟机开发模式?...

开发 Android 有几年了,来回答一下这个问题。

首先我们假定题主的问题是想问 Android 的性能看起来不如 iOS 是不是虚拟机的锅?如果不用虚拟机能否改善性能。

其次我们不讨论 Android 虚拟机是不是 JVM 的问题,因为虽然其中有一些实现上的差异,但是大致的原理是接近的。在这里探讨 ART 不是 JVM,是没有太大意义的。

那么先回答第一个问题,部分是,但不都是。

Android 的处理器整体跟 iOS 还有很大差距。这点从基准测试的跑分上就能看出来。基准测试使用的是 C 编写的代码,是不受运行时的那些机制限制的。这是性能不如 iOS 设备的大头。

Android 在近几年极大地改善了运行时性能。即使在 ART 之后,对于性能的改进也从未停止。但是受限于 Java 语言对于 JNI 的限制过于宽松,导致在大量需要跟 C 语言进行交互的计算的时候就没那么方便,需要频繁切换。

有些语法从 Java 继承而来,就导致了一些优化不太容易,比如泛型里的强制类型转换。C++ 和 C# 就没有这样的问题。

第二个问题,未必。

因为运行时是会做代码优化的。程序员手写的代码,未必会有运行时优化过的效率更高。去掉了运行时的垃圾回收等功能之后,程序的可靠性也会受到挑战。(这里不是说一定会出现可靠性问题,但是起码90%的程序员会因为内存问题而消耗更多的时间排查)。即使在具有自动回收功能的运行时上,仍然会出现内存泄漏的问题,更不用提手动回收了。

说句题外话,运行时是现代语言的一大特征。近几年新出现的流行语言,几乎都使用了运行时。从长远来看,设计良好的运行时,会随着硬件性能的不断提升,对程序运行的性能影响占的比例越来越低。

Java 的运行时从概念上讲,对比无运行时,是先进的。从性能来讲,未必是最优解,但是结合 Android 诞生的年代和生态来说,Android 的先驱们无疑是做出了非常正确的决定。随着近几年硬件性能的提升和系统不断的优化,因为性能问题而抛弃掉 Java,就显得没那么必要了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值