[英]Why does first call to java.io.File.createTempFile(String,String,File) take 5 seconds on Citrix?
[英]Why does the first method call always take the longest?
在閱讀Stack Overflow上的類似主題后,我編寫了以下代碼以了解System.nanoTime()
一致性。
它只是在方法調用空void函數之前和之后調用System.nanoTime()
,記錄進程中的已用時間。 但是,正如您在結果中看到的那樣,第一次調用總是花費最長的時間。 這是什么原因?
public class Test {
public static void main(String[] args) {
for(int i = 0; i < 10; i++) {
double start = System.nanoTime();
foo();
double end = System.nanoTime();
double diff = end - start;
System.out.println("Diff: " + diff);
}
}
public static void foo() {
}
}
結果:
Diff: 2765.0
Diff: 509.0
Diff: 236.0
Diff: 238.0
Diff: 230.0
Diff: 539.0
Diff: 359.0
Diff: 356.0
Diff: 380.0
Diff: 353.0
請注意,我確實讀過這個問題: 為什么首先在Citrix上調用java.io.File.createTempFile(String,String,File)需要5秒?
此外,此鏈接有助於將來參考,但不一定能回答我的具體問題: 如何在Java中編寫正確的微基准測試?
JVM懶洋洋地執行類解析(參見JVMS 5.4.3 )。 在您的情況下,常量池中foo
的符號引用在第一次執行invokestatic
字節碼時解析,即在方法的第一次調用時解析。 顯然,它比執行已經解析的字節碼需要更多的時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.