본문 바로가기

안드로이드 개발/Native

안드로이드에서 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

반응형