Android NDK相对于常规Java代码的性能



我最近一直在玩NDK,因为UI需要一个计算密集型算法的有效实现。NDK文件规定:

NDK的典型候选者是独立的、CPU密集型的操作,这些操作不会分配太多内存,例如信号处理、物理模拟等。简单地重新编码一个方法以在C中运行通常不会带来很大的性能提高。

我的是一种信号处理算法(自适应滤波器,如果你熟悉的话),计算密集型计算,有数百万次线性运算(无法显示代码,但数百万次线性操作几乎可以将其相加)。当我用JNI和Java实现相同的代码时,我几乎没有获得任何性能增益。事实上,在不确定性范围内,这两种方法都需要完全相同的时间,所以现在我不确定我是否应该只在其他方面使用Java。相比之下,它们都需要大约8秒才能完成任务。

当在JNI中实现的算法比Java工作得更快时,有什么更好的标准吗?有人举过这样一个例子吗?

例如:求和从1到1000000的自然数。代码如下:

unsigned int sum = 0;
for(int i = 1; i <= 1000000; ++i) {
    sum += i;
}

如果上面的代码是用java编写的,那么时间大约需要200ms。但当用jni中的c进行编码时,时间只花了大约30ms。你可以试一试。

最新更新