[英]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毫秒)
GetTickCount
和System.nanoTime()
使用不同的時間源。
GetTickCount
的問題是它的分辨率很差,通常在10ms左右。 這在文檔中明確說明:
GetTickCount函數的分辨率僅限於系統計時器的分辨率,通常在10毫秒到16毫秒的范圍內。
難怪它與nanoTime
有很大不同。
要使測量與System.nanoTime
一致,請通過調用QueryPerformanceCounter
或GetSystemTimeAsFileTime
使用更高分辨率的計時器。
編輯
JDK的System.nanoTime()
是在QueryPerformanceCounter
(源代碼)之上實現的。
在java方面,你將永遠受JVM的支配:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.