안드로이드 어플리케이션 개발을 위해 JAVA를 쓴다. 하지만 안드로이드에서 C/C++을 쓸수 있도록 구글에서는 NDK라는 것을 만들었다. 그렇다면 NDK(C/C++)에서 JAVA보다 얼마만큼의 성능을 가지는가에 대한 궁금증이 생겼다.
이런 궁금증을 해결 하기위해 용어먼저 설명 하겠다.
NDK
안드로이드는 JAVA를 기반으로 어플리케이션을 만들수 있는데, 기존 C/C++로 된 라이브러리를 JAVA로 재 개발 해야 되는 문제점들을 위해 구글에서 네이티브코드로 만들 수 있는 방법을 제공한 개발킷이다.
JNI
JAVA에서 NDK의 C/C++을 연결 해주는 인터페이스
그렇다면 수많은 연산을 통해 JAVA와 NDK의 성능을 테스트 해보겠다.
JAVA VS C
똑같은 연산을 하는 JAVA와 C코드를 준비 한다.
public int calc() {
int count = 3;
int i = 0;
for (i = 0; i < 100000000; ++i) {
count = count * 2 / 3 + 5 - 1;
}
return count;
}
jint Java_com_example_ndkspeedtest_MainActivity_calc( JNIEnv* env, jobject this)
{
int count = 3;
int i = 0;
for ( i = 0; i < 100000000; ++i )
{
count = count * 2 / 3 + 5 - 1;
}
return count;
}
JAVA코드와 C코드의 각각 성능 측정을 하였다.
07-20 01:09:20.066: E/Test(19435): Java : 3377, ret : 10
07-20 01:09:22.716: E/Test(19435): native : 2650, ret : 10
----------------------------------------------------------------
20%
07-20 01:09:30.326: E/Test(19435): Java : 3366, ret : 10
07-20 01:09:32.966: E/Test(19435): native : 2640, ret : 10
----------------------------------------------------------------
27%
07-20 01:09:38.551: E/Test(19435): Java : 3315, ret : 10
07-20 01:09:41.196: E/Test(19435): native : 2645, ret : 10
----------------------------------------------------------------
25%
07-20 01:09:47.626: E/Test(19435): Java : 3373, ret : 10
07-20 01:09:50.301: E/Test(19435): native : 2671, ret : 10
----------------------------------------------------------------
07-20 01:09:59.601: E/Test(19435): Java : 3362, ret : 10
07-20 01:10:02.276: E/Test(19435): native : 2672, ret : 10
----------------------------------------------------------------
- powered by hoon038
'안드로이드 개발 > Native' 카테고리의 다른 글
| Android NDK 개발을 위한 환경셜정 for Mac (3) | 2013.07.14 |
|---|---|
| UncaughtExceptionHandler를 이용한 앱 비정상 종료시 Log전송 및 재실행 하기 (5) | 2013.03.08 |
| 안드로이드 DexClassLoader를 이용한 dex동적으로 로딩 (0) | 2013.03.06 |