NDK vs JAVA表演
这个简单问题的简单答案?
任何身体都有假设C编码与NDK的速度有多快,然后使用java代码?(如果有的话) 让我们说,我在Java代码中在Y秒内进行X计算(相同的计算). 让我们说,计算是B = L / A C / D(所有X计算都是相同的). 编辑: 为什么我问这个? 解决方法
既然没有人想碰这个话题,既然没有考虑认真去尝试回答这个问题,所以我会去:
> Java编译为字节码,字节码由JIT编译为本地代码. 差异真的是额外的编译步骤,理论上java应该做一个更好的工作,然后你的C编译器,这就是为什么: > Java可以将统计计算插入到生成的本地代码中,然后在一段时间后重新生成本地代码,以便针对代码中的当前运行时路径进行优化. 最后一点听起来很棒,但是java却有一些权衡: >它需要GC运行来清理内存 GC复制活动对象并抛出所有死亡的一个,因为GC不需要为死的对象只为活的对象做任何事情,GC理论上比对象的正常malloc / free循环更快. 然而,大多数Java倡导者都遗忘了一件事,也就是说,没有人说你在编码C时必须malloc / free每个对象实例.你可以重用内存,你可以将内存块和包含数千个临时的内存块一个对象. 随着大堆的Java,GC时间增加,增加停顿时间.在某些软件中,在GC清理循环期间停机时间完全可以,在其他情况下会导致致命错误.尝试保持您的软件在GC发生时以定义的毫秒数作出响应,您将看到我在说什么. 在某些极端情况下,JIT也可能根本不选择JIT代码.当JITed方法大到8K时,如果我记得正确,就会发生这种情况.非JITed方法的运行时间罚分在20000%的范围内(至少在我们的客户是200倍).当JVM的CodeCache开始获得满足时,JIT也转过来(如果继续将新类加载到JVM中,这可能会发生,也可能发生在客户站点). 在Java中,JIT具有特定的时间来将字节码编译为本地代码,将所有CPU资源用于JIT是不行的,因为它与执行程序实际工作的代码并行运行.在C中,编译器可以运行,只要它需要吐出它认为是最优化的代码,它可以.它对执行时间没有影响,在Java中它具有. 我在说的是这样的: > Java给你更多的东西,但它并不总是由你来执行. 所以回答你的问题: >在Java上选择C不会使程序更快 如果只保留对预分配缓冲区的简单数学,那么Java和C编译器都应该吐出相同的代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |