西西河

主题:从曾经的Android组成员的角度来说说Android吧 -- zllwy

共:💬137 🌺380
分页树展主题 · 全看首页 上页
/ 10
下页 末页
            • cosmos
              家园 希望看到更多讨论

              他问了一堆的问题,很有意思。不过我很想知道这些问题最终的答案。大家都已经知道了Google的回答,MS总是太神秘了一点。

              • 家园 更多讨论

                最近会有一些有关Cosmos的文章发表,应该能够提供更多的细节。抱歉在这些方面现在不能说太多

            • cosmos
              家园 非常感谢
    • 家园 从此接触到了Google内部的那一套精密庞大的系统

      这里精密庞大的系统指的是什么?

      • 家园 其实公开都有

        GFS/Bigtable/Chubby/mapreduce/sawzall/dremel/megastore,公开论文都有。当然还有很多其他的系统建立在这些技术之上,以及把各个系统组合起来形成更复杂的大系统。比如RPC, scheduling, load balancing, monitoring, logging, 组成的大系统如search, data mining等等。

    • 家园 能不能解释一下为什么Android

      里要加一个VM?

      • 家园 因为Adroid的应用程序都是“Java”程序

        Android的应用程序是一种Java的变种,是将你的Java source code先编译成Java bytecode,然后再编译成DEX格式。这种DEX code将会运行在一种特殊的Java VM里面。这种VM叫做Dalvik,和我们常见的Java VM不同(stack-based VM),它是一种register-based VM,可以说是为了移动设备的特点专门打造的。

        点看全图

        外链图片需谨慎,可能会被源头改

        Android 2.2以后的Dalvik里面有JIT,运行时将你的程序编译成ARM格式的机器代码然后交给CPU运行。

        半个小时前我开始学习Andriod系统,以后如果有什么心得的话,一定和大家交流分享。

        关键词(Tags): #Dalvik Java
        • 家园 This is right. Thanks!

          I confused the JVM here with VMware kind of VM. :)

          Something I googled out:

          Up until Android 2.2 (Froyo) the JVM (really a Dalvik JVM for licensing reasons) on the Android platform was playing with one hand tied behind its back. Different from desktop/server Java, the JVM was still an interpreter, like the original JVM back in the Java 1.0 days. It was very efficient interpreter but an interpreter none-the-less and was not creating native code from the Dalvik bytecodes that it uses. As of Android 2.2 they have added a JIT, a just-in-time compiler, to the stack that translates the Dalvik bytecode into much more efficient machine code much like a C/C++ compiler. You can see the results of this in the benchmarks of Froyo which show a 2-5x improvement. As they add more and more JIT and GC features that have appeared in HotSpot, JRockit, etc, you will likely see even more improvements over time — without having to change or recompile the 3rd party developed software.

      • 家园 我的理解

        一个是Java的需要,至于为什么要用Java应该很容易理解(引用:Java的一堆好处。。。)。另外是起到一个Sandbox的作用。ARM cpu通常没有mmu,实现memory space isolation比较难。VM可以起到保护的作用。还有就是跨平台的需要,这样应用就独立于硬件结构了。虽然现实当中就ARM是主流,x86的也有吧。

        欢迎大家补充。

        • 家园 部分正确

          虽然送宝支持LZ的主贴,但是对这里的错误部分还是要批评的。

          最重要的需求是一个有很多开发人员基础的易于上手的UI Framework和相应的开发工具。Apple有XCode;MS有Visual Studio;Google有什么?所以Google就使了一招:偷天换日。偷来Java的UI开发工具和开发人员;得到(引用:Java的一堆好处。。。);换掉下面的VM;得到所需的性能等等。

          “ARM cpu通常没有mmu”说法灰常不正确。所有ARM应用处理器,只要能够运行完整Linux都有MMU。没有MMU的ARM只能运行阉割的Linux。所以所有运行Android的ARM必定有MMU。

          “还有就是跨平台的需要,这样应用就独立于硬件结构了”有些想当然。iOS/MacOS以及其上的应用程序没有VM也是跨平台的:ARM/X86;Windows CE没有VM,从来都是跨平台的:ARM/MIPS/X86。Linux没有VM也一样是跨平台的:所有你能想象的架构。我相信,如果Android打开始就没用VM,它一定也是跨平台的。

          纯技术争论,没有贬低LZ的意思。

          • 家园 Android smartphone上的app

            是用Java开发的,所以需要一个Java VM, right?

            Talking about VM, first thing hit my head is like VMware Fusion etc. Cannot understand why Android needs VM like that. A big misconception. :)

          • 家园 Android smartphone上的app
          • 家园 说得不错

            很有道理。谢谢纠正。

            不过还是解释一下。这个mmu的问题倒不是我说的。记得在解释dalvik VM的一个talk上说过,不过只有模糊记忆了。我想是这样的,几年前的时候这个可能是真的,现在当然都有MMU了。当时我听到的时候也有点迷惑,因为我写过StrongARM和XScale的hardware emulator,是有MMU的。可能我听错了吧。

            至于跨平台看你怎么解释了。广义的只要你能在不同平台上compile,就可以了。就像我老板说的,C是最跨平台的语言。哈哈。MacOS的fat binary是捆绑了两个architecture的binary。VM就更进一步,只要build一个binary就都可以运行了。对于mobile当然比MacOS的好了。

            • 家园 Sometimes when people say

              no MMU, what they really meant is no paging.

              • 家园 再说一下MMU

                不知道你说的什么意思,是MMU without paging吗?我从来没见过这样的ARM实现。没有page,MMU保护什么呢?像x86一样的segment?

                其实没有MMU的情况还是很多的。像Cortex Mx系列就没有MMU,从Cortex Ax开始才有。而且有时候为了performance,把MMU关掉也是有的。Linux里面有个CONFIG_MMU就是针对ARM的。不过看了一下我的phone上的/proc/config.gz,CONFIG_MMU=y。说明是turn on了。

分页树展主题 · 全看首页 上页
/ 10
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河