JNI代码运行速度比java代码慢

时间:2015-03-12 16:11:04

标签: java java-native-interface

我有兴趣学习JNI。 我已经开发了一个简单的代码来测试java代码和c ++代码中的性能。

这是我尝试过的: 我的Java代码:

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
    }
}

这是我的C ++代码:

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
}

我希望C ++代码更快或两个代码同时运行。 但输出完全不同:

  

C ++运行时间:3566毫秒

     

Java运行时间:6毫秒

为什么java代码比c ++代码快500多倍? 我真的希望它们能够同时运行,或者c ++代码运行得更快......

0 个答案:

没有答案