当前位置: 首页 > 面试题库 >

通过JNI更快的Math.exp()?

徐杰
2023-03-14
问题内容

我需要计算Math.exp()从Java非常频繁,是有可能得到本机的版本运行速度比 Java的Math.exp()

我只尝试了jni + C,但是它比纯 java 慢。


问题答案:

+1以编写自己的exp()实现。也就是说,如果这 确实
是您应用程序中的瓶颈。如果您可以处理一些不准确性,则可以使用许多非常有效的指数估计算法,其中一些可以追溯到几个世纪以前。据我了解,即使对于必须返回“精确”结果的算法,Java的exp()实现也相当慢。

哦,不要害怕用纯Java编写该exp()实现。JNI有很多开销,并且JVM有时甚至可以在C / C ++不能实现的情况下在运行时优化字节码。



 类似资料:
  • 问题内容: 如何获得指向Java ByteBuffer内部数组的指针? PS:我这样做是为了共享Java和C ++使用的内存。 问题答案: ByteBuffer必须是直接起作用的字节缓冲区。

  • 问题内容: 我的Java应用程序使用JNI调用用C编写的库。此本地库将错误记录到stderr,但是我想以某种方式通过我的log4j记录器重定向错误流。这可能吗? C库是外部的-我没有源,所以无法更改它。 谢谢 问题答案: 注意:我尚未尝试此答案;YMMV。 POSIX方法将更改与流关联的基础文件。如联机帮助页所述:“ freopen()函数的主要用途是更改与标准文本流(stderr,stdin或s

  • 问题内容: 我目前在一个项目中同时使用C 和Java,并且希望能够将包含在C 中的对象发送到我的Java接口,以便通过GUI对其进行修改,然后将所做的修改发送回C ++中。 到目前为止,我一直没有通过JNI接口向Java返回int或boolean值。这次我必须通过接口发送对象。我已经在C ++和Java中提供了类似的类定义。 我想知道如何创建对象,以便可以在Java中使用它。 在C ++中,我有:

  • 我正在使用Android的类解码MP4 H.264视频,提取每个并尝试转换为RGB,以便我们可以在其他地方使用它。 在从接收到有效的缓冲区索引并获取该之后,我们将使用从JNI获取C代码中的缓冲区,以便在该端进行转换。但是,由于某些原因,当我们重新看到大小值和字节布局时,所看到的缓冲区似乎没有意义。 根据上次返回的,我得到的MediaFormat显然是-下面是完整的MediaFormat字符串。 视

  • 我有一个,其中包含对项目进行抽样的概率(权重)。例如,包含如下所示的5个值。 我尝试了这样的方法,首先把概率列表做成累加形式。 0.1、0.5、0.7、0.8、1.0 那么我的做法如下。我生成一个随机double,并在列表上迭代以找到第一个大于随机double的项,然后返回它的索引。 我不确定二分搜索能有什么帮助。假设我生成了p=0.01。然后,二分搜索可以使用递归,如下所示。 0.01小于0.7

  • 本文向大家介绍java通过jni调用opencv处理图像的方法,包括了java通过jni调用opencv处理图像的方法的使用技巧和注意事项,需要的朋友参考一下 1. 建立java文件 2. 切换到工程src文件夹 javac getImageFeature.java javah getImageFeature 生成 getImageFeature.h 文件 3. VS2013建立dll工程 添加g