Java 手机-代号-它怎么能比母语更快? 背景:

Java 手机-代号-它怎么能比母语更快? 背景:,java,ios,objective-c,mobile,native,Java,Ios,Objective C,Mobile,Native,开始为android和ios编写移动应用程序 考虑许多替代方案。我无法忍受html5/webview。大多数时候,它是缓慢的。我尝试了很多演示应用程序(phonegap/steroid…),感觉不自在。不够光滑 更多的是,一些游戏即将到来:所以不可能。我想要一个本地开发 就其本身而言,objective-c不是问题所在。但是,如果我只需要一次开发就可以创建应用程序,使用一种易于编码的语言(java),这听起来很不错 问题: 也许他们正在使用C api,但是现在这个api主要是obj-C 如果我

开始为android和ios编写移动应用程序

考虑许多替代方案。我无法忍受html5/webview。大多数时候,它是缓慢的。我尝试了很多演示应用程序(phonegap/steroid…),感觉不自在。不够光滑

更多的是,一些游戏即将到来:所以不可能。我想要一个本地开发

就其本身而言,objective-c不是问题所在。但是,如果我只需要一次开发就可以创建应用程序,使用一种易于编码的语言(java),这听起来很不错

问题:

也许他们正在使用C api,但是现在这个api主要是obj-C


如果我真的不必使用本机iOS语言(obj-c)编写代码并通过javavm获得更好的结果,一些开发人员甚至创建者是否可以告诉我我觉得很奇怪。

您链接到的页面上的一句话:

一个小小的免责声明是Objective-C基准测试在方法/消息调用方面有点重,这会使基准测试偏向于我们。Codename One中的方法调用自然要比等效的Objective-C代码快得多,因为该语言的语义


这不正是你所问的吗?Objective-C的体系结构使得动态调度无法优化,而Java的体系结构允许单态调用站点甚至完全方法内联。一个非常关注这一方面的基准测试会使结果偏向JVM,但实际应用程序的性能几乎从来不会被方法调度开销所支配。

我不知道CodenameOne,但知道Java虚拟机的一般行为。
通常,java程序需要更多的启动时间,因为在执行之前必须编译中间java字节码。但是,在执行过程中,VM可以自由执行运行时优化,例如重新排列代码块以更好地利用CPU缓存等。
由于虚拟机可以在运行时执行此步骤,因此拥有静态编译器所不具备的知识,因此它有时甚至可以超过优化的C代码。

一个比较C和Java的真实世界基准测试的老例子可以在中找到。

谢谢。我读到(并理解)了这句话:)但苹果公司的objective-c设计怎么可能没有这么优化呢?在这种情况下,如果其他一些语言可以在平台上击败“应该优化”的原始语言,为什么还要麻烦用原生objective c进行编码呢?你选择关注错误的方面:苹果没有看到以与应用程序性能无关的方式优化objective-c的必要性。你想费心用本地语言编写代码以获得应用程序的良好性能,而不是专门挑选一个基准测试,因为它采用了一种狭隘的机制,而这正是替代平台可以更好地优化的机制。所以没有什么神奇之处:ios上的objective-c和android上的java,对吗?你可以随时尝试,但通常,非本地的替代方案由于某种实际原因而失败。请注意,iOS上也有Swift,苹果显然将其视为前进的方向。我完全同意Marko。上面提到的基准测试的目标主要是显示我们的Java端口在性能方面与本机具有“竞争力”。iOS应用程序是平滑的,因为库(核心动画等)对GPU进行了可笑的优化。Syren,基准测试没有显示任何内容。我们甚至没有使用编译器、版本和标志。“march=native”和profile非常有用,但不是自动生成的。。这里没有语言之争,但如果java始终优于c,那么解雇c程序员,他对语言/优化了解不够。我不想找语言之争。我指的是关于“做一些开发人员,或者甚至创建者可以告诉我,如果我真的不需要用本机iOS语言(obj-c)编码,并通过java虚拟机获得更好的结果,这对我来说似乎很奇怪。”这并不奇怪。虚拟机具有静态编译器所不具备的信息,并且可以更快。我们完全同意Syren:)仅供参考,Java的优势之一是内存分配速度快,比标准C malloc/free/calloc快得多。GC在后台运行的事实允许更好地使用多核芯片,特别是在具有适当并发VM的情况下。这也大大简化了多线程代码。大型C应用程序可以优化到荒谬的程度(包括自定义malloc实现)但这还不够:Java的核心问题之一是,大多数Java实现都是针对服务器而不是客户机代码进行优化的。启动缓慢的原因之一是默认JVM在启动时加载800个类,并初始化许多对象(例如字符串)。我们的虚拟机没有类,但是您会得到很多静态初始化器代码(globals等),这些代码会被初始化,这也需要一些互斥(以防止并发初始化),然后我们还会初始化应用程序中使用的整个字符串集(理想情况下,这将在将来得到优化)。这在iPhone4(不是S)上不是很明显,所以我们现在就顺其自然吧。这里总是有优化的空间。代码名One iOS VM转换为C而不是Objective-C。移植层是Objective-C和C的混合体,但我们尝试减少Objective-C的数量以提高性能。事实上,我们在新VM中遇到的最大性能问题之一是字符编码部分的Objective-C代码。。。(仅供参考,我在我们的新虚拟机中编写了大部分代码)@ShaiAlmog:好的,那么你正在做我想做的关于避免obj-c的事情。这太棒了,谢:)