안드로이드에서 Java와 NDK(C/C++) 성능에 대해서..



안드로이드 어플리케이션 개발을 위해 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

—————————————————————-

27%

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

—————————————————————-

25%
평균 C가 JAVA에 비해 25% 빠른 성능을 보여주고 있다. 
단순 연산만으로 측정한 값이며, 그래픽작업등 더 많은 연산의 경우 C가 더욱 우수한 성능을 보여줄 것으로 예상된다.

– powered by hoon038