NDK vs JAVA表演

前端之家收集整理的这篇文章主要介绍了NDK vs JAVA表演前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这个简单问题的简单答案?

任何身体都有假设C编码与NDK的速度有多快,然后使用java代码?(如果有的话)

让我们说,我在Java代码中在Y秒内进行X计算(相同的计算).
可以通过NDK中的C代码在相同的Y秒内执行多少X次计算? 1.2?2.7?任何猜数?

让我们说,计算是B = L / A C / D(所有X计算都是相同的).

编辑:

为什么我问这个?
因为我考虑将我的java处理相机镜头移动到C代码,以获得更大的分辨率机会

解决方法

既然没有人想碰这个话题,既然没有考虑认真去尝试回答这个问题,所以我会去:

> Java编译为字节码,字节码由JIT编译为本地代码.
> C直接编译为本地代码.

差异真的是额外的编译步骤,理论上java应该做一个更好的工作,然后你的C编译器,这就是为什么:

> Java可以将统计计算插入到生成的本地代码中,然后在一段时间后重新生成本地代码,以便针对代码中的当前运行时路径进行优化.

最后一点听起来很棒,但是java却有一些权衡:

>它需要GC运行来清理内存
>它可能不是JIT代码

GC复制活动对象并抛出所有死亡的一个,因为GC不需要为死的对象只为活的对象做任何事情,GC理论上比对象的正常malloc / free循环更快.

然而,大多数Java倡导者都遗忘了一件事,也就是说,没有人说你在编码C时必须malloc / free每个对象实例.你可以重用内存,你可以将内存块和包含数千个临时的内存块一个对象.

随着大堆的Java,GC时间增加,增加停顿时间.在某些软件中,在GC清理循环期间停机时间完全可以,在其他情况下会导致致命错误.尝试保持您的软件在GC发生时以定义的毫秒数作出响应,您将看到我在说什么.

在某些极端情况下,JIT也可能根本不选择JIT代码.当JITed方法大到8K时,如果我记得正确,就会发生这种情况.非JITed方法的运行时间罚分在20000%的范围内(至少在我们的客户是200倍).当JVM的CodeCache开始获得满足时,JIT也转过来(如果继续将新类加载到JVM中,这可能会发生,也可能发生在客户站点).
有一点,JIT统计数据还可以将128个核心机器的并发性降至基本单核性能.

在Java中,JIT具有特定的时间来将字节码编译为本地代码,将所有cpu资源用于JIT是不行的,因为它与执行程序实际工作的代码并行运行.在C中,编译器可以运行,只要它需要吐出它认为是最优化的代码,它可以.它对执行时间没有影响,在Java中它具有.

我在说的是这样的:

> Java给你更多的东西,但它并不总是由你来执行.
> C给你更少的,但它取决于你如何表现.

所以回答你的问题:

>在Java上选择C不会使程序更快

如果只保留对预分配缓冲区的简单数学,那么Java和C编译器都应该吐出相同的代码.

猜你在找的Java相关文章