我在java中编写了一个方法,该方法由一个O(n)单循环组成,该循环创建一个ArrayList并向其添加元素,并且需要几秒钟来处理~10000个条目。但是,我的android应用程序需要1到2分钟才能执行相同的任务。我不是要求如何解决这个问题,特别是在我脑海中提出这个问题的原因是什么因素导致java代码在Android上的运行速度比我的笔记本电脑慢?
具体做法是:
答案 0 :(得分:2)
处理器类型和设计(包括指令管道深度,缓存和数据位置 - 可能是ARM vs Intel),系统库,内存带宽,操作系统和运行时环境实现(一个针对速度进行优化,并针对空间/功耗进行优化。
这些是通过内部屏幕和内部电源将设备安装在口袋中所需的工程权衡。
答案 1 :(得分:1)
答案 2 :(得分:0)
answer给出的@Elliott Frisch 100%正确,涵盖了对执行速度有影响的所有内容。
但是,我认为强调软件差异以及Android上的运行时实现与桌面上通常使用的完全不同是非常重要的。
在桌面上,Java代码被编译为 java字节码,然后由Java Virtual Machine执行。此VM通常针对桌面运行的任何硬件和操作系统的速度进行优化。
在Android方面,相同的Java代码也被编译为字节码,但它是非常不同的并且由特定于Android的Dalvik运行时执行,该运行时(通常)针对效率(节电等)而不是纯粹的速度。
Android(L)的下一个版本设置为使用一个名为ART (Android Runtime)的稍微速度更快的版本替换此运行时 - 它将通过使用Ahead-Of-Time(AOT)编译而不是Just-来完成此操作实时(JIT),它应该加快执行速度。
考虑到所有这些,可能有人认为,鉴于完全相同的硬件,桌面和Android之间的执行速度可能仍然存在差异。事实上,在不同的桌面操作系统(Windows vs Linux vs OSX)和不同的Java VM上执行相同的Java代码也是如此。
最重要的是,即使硬件在执行速度中起着最大的作用,运行时环境也会对代码的执行速度产生非常大的影响。