AndroidでC++コードの実行速度とJavaコードの実行速度を少しだけ比較してみました。
この検証に使ったコードは以下に公開しています。
github.com
実行したコード
実行したコードは、for文中にif文を挟むコードです。
計測されている時間はミリ秒です。
エミュレータではJavaの方がC++よりも実行速度が速くなったりと実行速度がおかしかったので実機で計測しました。
C++の導入やそのコードの使用方法については省略します。
C++
extern "C" JNIEXPORT jint JNICALL Java_com_wrongrong_cpptest_MainActivity_cppForTest(JNIEnv* env, jobject obj){ int i,j; j = 0; for(i = 0;i < 200000000;i++){ if(i&1 == 1)j++; } return j; }
Java
public class JavaForTest { public int javaForTest(){ int i,j; j = 0; for(i = 0; i < 200000000; i++){ if((i&1) == 1)j++; } return j; } }
検証用コード
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = (TextView) findViewById(R.id.sample_text); String ln = System.lineSeparator(); JavaForTest jft = new JavaForTest(); int i,j=0; long jftS,jftE,cppS,cppE; for(i = 0;i < 200000000;i++)j += i; jftS = System.currentTimeMillis(); i = jft.javaForTest(); jftE = System.currentTimeMillis(); cppS = System.currentTimeMillis(); j = cppForTest(); cppE = System.currentTimeMillis(); //出力の整形 StringBuilder sb = new StringBuilder(String.valueOf(i - j)); sb.append(ln); sb.append("Java:"); sb.append(String.valueOf(jftE - jftS)); sb.append(ln); sb.append("C++:"); sb.append(String.valueOf(cppE - cppS)); sb.append(ln); sb.append("Java/C++:"); sb.append(String.valueOf((double)(jftE - jftS) / (double)(cppE - cppS))); tv.setText(sb.toString()); }