簡體   English   中英

在Java JNI中測量時間(本機調用Java)

[英]Measure time in Java JNI ( native call Java)

我試圖在JNI調用中測量時間,它從本機調用Java。

在C代碼中,我應用“GetTickCount”api來獲取JNI執行時間和Java中的“System.nano”。

例:

long start = GetTickCount();
....//CallStaticMethod exampleMethod...
long end = GetTickCount();
long duration = end - start;

而在Java中

public static exampleMethod(){
    long start = System.nano();
    //do something
    long end = System.nano();
    long duration = TimeUnit.NANOSECONDS.toMilis(end - start);
}

有時,它是不一致的,因為java的持續時間超過了C的持續時間。 (約5至10毫秒)

GetTickCountSystem.nanoTime()使用不同的時間源。

GetTickCount的問題是它的分辨率很差,通常在10ms左右。 這在文檔中明確說明:

GetTickCount函數的分辨率僅限於系統計時器的分辨率,通常在10毫秒到16毫秒的范圍內。

難怪它與nanoTime有很大不同。

要使測量與System.nanoTime一致,請通過調用QueryPerformanceCounterGetSystemTimeAsFileTime使用更高分辨率的計時器。

編輯

JDK的System.nanoTime()是在QueryPerformanceCounter (源代碼)之上實現的。

在java方面,你將永遠受JVM的支配:

http://shipilev.net/blog/2014/nanotrusting-nanotime/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM