Android NDK性能优于常规Java代码

Pho*_*non 5 java performance java-native-interface android android-ndk

我最近一直在玩NDK,因为UI需要高效实现计算密集型算法.NDK文档说明:

NDK的典型优选候选者是独立的,CPU密集型操作,不分配大量内存,例如信号处理,物理模拟等.简单地重新编码在C中运行的方法通常不会导致大的性能提升.

Mine是一种信号处理算法(自适应滤波器,如果您熟悉的话),计算密集型计算具有数百万个线性运算(无法显示代码,但数百万个线性运算几乎总结了它).当我使用JNI和Java实现相同的代码时,我几乎没有获得性能提升.实际上,在不确定范围内,它需要完全相同的时间,所以现在我不确定是否应该只使用Java来实现其他目的.为了比较,它们都需要大约8秒才能完成任务.

当JNI中实现的算法比Java工作得更快时,是否有更好的标准?有没有人有一个表现真正引人注目的例子?

小智 1

例如:对 1 到 1,000,000 之间的自然数求和。代码如下:

unsigned int sum = 0;
for(int i = 1; i <= 1000000; ++i) {
    sum += i;
}
Run Code Online (Sandbox Code Playgroud)

如果上面的代码是用java编写的话,时间大概需要200ms左右。但在jni中用c编码时,时间只需要30ms左右。你可以尝试一下。

  • 这不是测试性能的可靠代码,编译器可能会对其进行优化。我会在互联网上搜索一些可靠的代码片段。 (3认同)