这个简单问题的简单答案?

任何身体都有假设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编译器都应该吐出相同的代码.

NDK vs JAVA表演的更多相关文章

  1. ios – Xamarin Ahead-of-Time(AOT)编译器与普通编译器

    我的理解是Xamarin的Ahead-of-Time编译器直接将Xamarin.iOS应用程序编译为本机ARM汇编代码.然而,我没有得到的是为什么它需要被称为“Ahead-of-Time”而不仅仅是一个普通的编译器.Xamarin的AOT编译器和传统编译器之间有什么区别,还是仅仅是一个营销术语?没有.Xamarin在该段中传达的信息是,他们的代码比简单的基于字节码的语言执行得更快.对于iOS和Android,他们都能够在热代码路径上执行本机代码以提高性能.AOT和JIT这两个术语是关于他们如何做到这一点的

  2. 使用swift编译器裸机?

    我真的很想使用swift进行嵌入式编程,因为我觉得它更适合用于c,我正在使用的处理器是ARMCortex-M4F(http://www.ti.com/tool/ek-tm4c123gxl).看一下swift编译器page,它说你可以从swift源生成LLVMIR然后我希望与LLVM交叉编译.这可能吗?绝对可以使用Swift生成机器代码.实际上,默认情况下,当您在Xcode或swiftc命令行编译器

  3. android – Ndk-cygwin路径具体问题

    可笑的windowsxp,cygwin&ndk为我的项目.我映射了cygwin.batch文件中的所有路径.我正在尝试通过cygwin编译hello-jni.cygwin.bat的内容@echo关闭在执行命令./ndk-build时,我收到了错误…解决方法父文件夹应为“jni”,然后在Android.mk中

  4. 将Trickle移植到android

    >如何告诉编译器链接我之前为android交叉编译的共享库,以便为android生成最终的可执行命令行应用程序.而且这甚至可以在Android上移植涓流?

  5. 使用Android NDK加密从普通Android应用程序传递的数据

    是否有可能并且值得尝试使用androidNDK开发一些服务器应用程序,它将加密从普通的基于Java的应用程序传递给它的数据?),才能在Cipher中使用blowfish.而且我怀疑它会更快.我在Symbian上使用blowfish进行加密,速度要快得多,所以我认为在android中由于使用Java虚拟机而速度较慢,我想尝试本机应用程序.以前有人做过吗?解决方法您正在测试哪个版本的Android?

  6. Android NDK调试:armeabi-v7a无法正常工作

    或者我错过了什么?解决方法我遇到过同样的问题.我在本文后面配置了eclipse:http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/然后我从armeabi变为armeabi-v7a.然后我无法调试.我解决了这个问题:1)您必须修复“调试配置”中的文件夹>主标签更改…obj/local/armeabi-v7a/app_process>调试器选项卡更改…

  7. 在Android Studio中解决已弃用的NDK警告

    或者除了添加所有已编译的代码并设置我之前提到的标志之外,还有其他方法可以将OpenCV导入Android项目吗?任何有关这方面的帮助将不胜感激.解决方法我建议迁移到使用cmake的本机支持.您可以查看链接,该链接提供了使用cmake通过以下link添加OpenCV的分步教程.您的代码应该保持不变而不做任何更改,只有必要的操作才能弄清楚如何使用CMakeLists.txt将它们包含在构建过程中.

  8. Android JNI中的高精度计时器

    我正在尝试描述我的JNI应用程序.是否有类似“自启动后获取刻度”的东西,我可以用来衡量功能和/或系统?

  9. android-ndk-build在最近的NDK更新后无法构建Superpowered音频库

    更新2016年3月19日:Superpowered发布了新的二进制文件,可与NDKr11一起正常运行我正在尝试在AndroidStudio中构建Superpowered库CrossExample示例项目.直到最近的NDK更新,它像魅力一样工作,但现在执行ndk-build会出错:我尝试用不同的工具链构建,删除/添加几个构建标志,到目前为止没有运气.在使用SuperpoweredSDK和几乎相同配置

  10. gomobile命令错误“没有设置android NDK路径”

    我在Windows中使用Go版本1.7.5,当我尝试使用gomobile命令安装或绑定或构建时.它显示此错误–“gomobile:没有设置AndroidNDK路径.请通过安装AndroidSDK管理器或设置-ndk标志的ndk-bundle运行gomobileinit.”我已将NDK路径添加到系统变量$PATH,甚至手动安装了NDK,但仍然存在错误.谢谢你的时间!!

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部