工作大家已经实现了一个类来将本机C ++共享库加载到我们的Android应用程序中,他将此类命名为“LibLoader”。他提出的解决方案是每次我们需要使用本机库中声明的本机函数之一时实例化一个LibLoader对象。我认为从性能的角度来看这不是最佳的,所以我在考虑优化它的最佳方法。
到目前为止,我想到了两种解决方案:
考虑到本机共享库是通过类中的static / instace initializacion加载的,我的问题是:
我的代码是:
public class LibLoader {
static final String TAG = "LibLoader";
static boolean armv7 ;
static
{
String arch = System.getProperty("os.arch");
//determine which library to load according to CPU type
if(arch.contentEquals("armv7l"))
{
//fftw neon compiled library functions work with armv71 and armv6
try {
System.loadLibrary("fftwfNeon_fftTwiddle"); //this won't load from any other platform
armv7 = true;
}catch (UnsatisfiedLinkError e)
{
Log.e(TAG, "Unable to load fftwfNeon_fftTwiddle library "+ e.getMessage());
}
}
else
{
try {
System.loadLibrary("fftTwiddle");
armv7 = false;
}catch (UnsatisfiedLinkError e)
{
Log.e(TAG, "Unable to load fftTwiddle library "+ e.getMessage());
}
}
}
public native void GetComplexFFtDoubleIN(double[] realIN, double[] imagIN, int fftSize, double[] TW, boolean ifftFlag);
public native void FFTWfNeonSymb(int fftSize, float[] realPart, float[] imagPart, boolean isFFT);
public native void FFTWfNeonSync(int fftSize, float[] realPart, float[] imagPart, boolean isFFT);
}
答案 0 :(得分:0)
让方法静态而不是为类创建实例变量,不会对CPU性能产生太大影响。但是这两种实现在内存使用方面有很大不同。
如果只是FFT计算,我建议保持静态。这可以使代码免于内存泄漏。
更新:在我解释的两个选项之间创建一个单例。以下是按照内存简单的顺序执行此操作的3种方法。