I am interested in learning JNI. I have developed a simple code to test performance in both java code and c++ code.
here is what I have tried: My Java Code:
public class TestJni
{
static
{
System.load("../../cpp/dist/testlib.so");
}
public static void main(String[] args)
{
int size = 200;
//////////C++//////////
long startTime = System.nanoTime();
new TestJni().doJob(size);
long endTime = System.nanoTime();
long duration = (endTime - startTime);
System.out.println("C++ Run time: "+(duration/1000000)+" milli-second\n");
////////////Java///////
startTime = System.nanoTime();
javaJob(size);
endTime = System.nanoTime();
duration = (endTime - startTime);
System.out.println("Java Run time: "+(duration/1000000)+" milli-second\n");
}
private native void doJob(int size);
private static void javaJob(int size)
{
int f;
for(int i = 0 ; i<size ; i++)
{
for (int j = 0; j < size; j++)
{
for (int k = 0; k < size; k++)
{
for (int z = 0; z < size; z++)
{
f=i+j+k+z;
}
}//for k
}//for j
}//for i
}
}
And This is my C++ Code:
JNIEXPORT void JNICALL Java_test_1jni_TestJni_doJob (JNIEnv * env, jobject obj , jint jsize)
{
int f;
int size = jsize;
for(int i = 0 ; i<size ; i++)
{
for (int j = 0; j < size; j++)
{
for (int k = 0; k < size; k++)
{
for (int z = 0; z < size; z++)
{
f=i+j+k+z;
}
}//for k
}//for j
}//for i
}
I expected C++ code to be faster or both codes run at same time. But output is completely different:
C++ Run time: 3566 milli-second
Java Run time: 6 milli-second
Why java code is more than 500 times faster than c++ code? I really expected them to run at same time , or c++ code run faster....