Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么android构建在VM上(Dalvik)_Android_Dalvik - Fatal编程技术网

为什么android构建在VM上(Dalvik)

为什么android构建在VM上(Dalvik),android,dalvik,Android,Dalvik,我很想知道是什么让谷歌选择在JavaVM上开发android框架 在为android编写代码将近6个月的过程中,我发现在资源有限的平台上,在VM上运行代码非常慢。这涉及到很多开销。我知道java是可移植的等等,难道不可能使用本地语言并获得VM提供的性能和功能吗?对于面向性能的应用程序,仍然需要编写本机代码并使用JNI进行包装 那么,谷歌为什么选择这个特殊的堆栈: 基于Arm的核心(可以理解,Arm最适合移动设备) Linux(开源) Java虚拟机(我的问题) 编辑:我知道java -jvm与我

我很想知道是什么让谷歌选择在JavaVM上开发android框架

在为android编写代码将近6个月的过程中,我发现在资源有限的平台上,在VM上运行代码非常慢。这涉及到很多开销。我知道java是可移植的等等,难道不可能使用本地语言并获得VM提供的性能和功能吗?对于面向性能的应用程序,仍然需要编写本机代码并使用JNI进行包装

那么,谷歌为什么选择这个特殊的堆栈:

  • 基于Arm的核心(可以理解,Arm最适合移动设备)
  • Linux(开源)
  • Java虚拟机(我的问题)
  • <>编辑:我知道java -jvm与我的服务器上C++应用程序的运行是一致的,但不是在Android上运行。
    关于Android,情况并非如此——根据我的经验,用JNI包装的C++代码运行速度远远快于java代码(注意,我甚至用java中的静态块检查了完全相同的代码),我同意您在任何其他平台上的答案。

    < P> Dalvik VM使用它自己的字节码,而不是java字节码。它的设计非常快(相对而言)。我认为它的标题中的“VM”部分有点像是在转移视线,因为人们倾向于认为无论发生什么事情,它都会“缓慢”。您自己也说过,您使用的是一个“资源有限的平台”——这可能是您性能低下的主要原因,比Dalvik VM更为严重

    免责声明:我不是Dalvik或Android的专家,无论以何种方式、形状或形式。然而,人们似乎可以基于“它使用虚拟机”和“你用Java编写应用程序”等想法,对Android做出很多假设,而不必进一步研究平台


    有关Dalvik VM内部结构(来自Google I/O 2008)的更多信息,请参阅。

    我认为关键在于,不要像对待Destkop或服务器虚拟化那样看待Java VM——它们非常不同。在最基本的层面上,JavaVM(在本例中是Dalvik)只是“编译器”生成的字节码到本机机器码之间的翻译层。它是一个虚拟机——但是它没有像在Untutu中运行Ubuntu一样的开销。

    < P> java应用程序已经被证明(不总是)运行得像C语言、C++语言等应用程序一样快速、顺利地运行。很多人都说java和vm速度很慢,实际上没有太多的证据或细节——这篇参考文章中有一些细节

    Java是一种广为人知的语言,很容易学习。把安卓sdk和工具交给所有这些熟悉Java的人,已经让安卓市场有了为用户提供大量应用程序的巨大潜力

    免责声明:我不是这方面的专家,就我所知,Java是大学甚至高中最普遍教授的语言。它广泛应用于专业领域,背后有大量代码库,帮助开发人员更快地创建更高质量的应用程序

    2) 与本机代码相比,开销并没有那么大,特别是对于经过JIT优化并由设计更加完善的gc监控的设计良好的代码


    真的,我认为仅这两个原因就足以证明为什么Java被选为Android上支持的主要语言。

    @Woot4Moo这不是一个很好的回答-这是一个足够有效的问题,可以让社区决定他们是否/如何回答,根本没有那么主观——这不是一个直接的编程问题。这是基于猜测,除非我们在这里让谷歌的人直接为他们做出的架构决策负责。至少可以说丹尼尔是主观和有争议的。顺便说一下。。。谷歌没有决定这一点。谷歌在Android已经开发出来的时候就买了它。@Cristian:谷歌买Android的时候,Dalvik还不存在,也没有关于技术堆栈的明确决定。是的,这是真的,因为在我的官方工作中,我们使用java虚拟机本身,我对在笔记本电脑或power服务器上运行虚拟机没有任何抱怨,但它真的值得像android那样在资源有限的平台上运行吗?@srinathhs它与JVM不同。Dalvik VM运行本机字节码。我不认为我理解你对它是一个“资源有限的平台”的担忧——移动开发,几乎从定义上来说,与“笔记本电脑或电源服务器”相比,资源有限(如果我理解正确的话,你似乎在做这件事)。确切地说,移动开发是资源有限的,那么,为什么要在那里放一个虚拟机而不是其他任何东西呢?(我现在正在看google IO视频)也要配合视频。@Donut-dalvik VM不运行“本机”字节码(可能是arm或thumb操作码),它运行dalvik字节码。与传统的JVM有一些架构上的差异,但它仍然是一个与实际硬件不同的处理器模型编写的程序的想法。对于Android来说,情况并非如此——根据我的经验,用JNI包装的C++代码运行速度远远快于java代码。(注意,我甚至用java中一个静态块中完全相同的代码进行了检查)在任何其他平台上,我都会同意你的答案。实际解释的虚拟机将比本机代码慢。巧妙地利用JIT的虚拟机可能更接近本机,但是通过将程序片段转换为本机代码而不是虚拟代码来运行。实际上,dalvik虚拟机的开销比在虚拟机中运行x86代码要大得多osted在x86机器上。Dalvik字节码不是处理器本机可执行的,必须动态或通过JIT进行翻译。但在现代同一处理器“VM”解决方案上运行的代码是