JNI效能測試一—JNI調用C與Java調用java效能比較

來源:互聯網
上載者:User

PerformanceTest.java

package com.jni;</p><p>import android.app.Activity;<br />import android.os.Bundle;<br />import android.util.Log;</p><p>public class PerformanceTest extends Activity {<br />static<br />{<br />try<br />{<br />System.loadLibrary("PerformanceTest");<br />} catch (UnsatisfiedLinkError ule)<br />{<br />System.err.println("WARNING: Could not load library!");<br />}<br />}<br />private final String PerformanceTestTAG ="PerformanceTest:performanceTestFunc :";<br />/* JNI 測試函數 */<br />private native void emptyJniFunction();<br />/* JAVA測試函數 */<br />private void emptyJavaFunction()<br />{</p><p>}<br /> /** Called when the activity is first created. */<br /> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);<br /> performanceTestFunc();<br /> }<br /> /* 效能測試函數 */<br /> public void performanceTestFunc()<br /> {<br /> /* 測試數量級為100萬次 */<br />int mLoopCount = 1000000;<br />int i = 0;<br />int base = 1000000;<br />String timeStr_ms;/* 毫秒對應String*/<br />/* 精確度為納秒級 */<br />long startTime = System.nanoTime();<br />/* JNI 調用 */<br />for(i = 0;i <= mLoopCount; ++ i)<br />{<br />emptyJniFunction();<br />}<br />long endTime = System.nanoTime();<br />timeStr_ms = String.valueOf((endTime-startTime)/base);<br />Log.v(PerformanceTestTAG+"In Jni:", timeStr_ms+"ms");<br />startTime = System.nanoTime();<br />/* JAVA 調用 */<br />for(i = 0;i <= mLoopCount; ++ i)<br />{<br />emptyJavaFunction();<br />}<br />endTime = System.nanoTime();<br />timeStr_ms = String.valueOf((endTime-startTime)/base);<br />Log.v(PerformanceTestTAG+"In JAVA:", timeStr_ms+"ms");<br /> }<br />}

com_jni_PerformanceTest.c

/* DO NOT EDIT THIS FILE - it is machine generated */<br />#include <jni.h><br />/* Header for class com_jni_PerformanceTest */</p><p>#ifndef _Included_com_jni_PerformanceTest<br />#define _Included_com_jni_PerformanceTest<br />#ifdef __cplusplus<br />extern "C" {<br />#endif<br />/*<br /> * Class: com_jni_PerformanceTest<br /> * Method: emptyJniFunction<br /> * Signature: ()V<br /> */<br />JNIEXPORT void JNICALL Java_com_jni_PerformanceTest_emptyJniFunction<br /> (JNIEnv *env, jobject obj)<br />{</p><p>}<br />JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved)<br />{<br />JNIEnv *env;<br />int result;</p><p>result = JNI_VERSION_1_4;<br />return result;</p><p>}<br />#ifdef __cplusplus<br />}<br />#endif<br />#endif<br />

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE     := PerformanceTest

LOCAL_SRC_FILES :=  src/com_jni_PerformanceTest.c

include $(BUILD_SHARED_LIBRARY)

 

 

如所示,通過Jni調用c的空實現函數,調用100萬次,用時41747ms,而使用java調用java的空實現函數100萬次,用時25378ms。以上測試數量級為100萬次,系統android 2.2,測試於android模擬器上,jdk1.6.0_17。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.