2016-02-13 42 views
1

java.io.BufferedWriter還有一個方法:java.io.BufferedWriter.min(int a,int b)的含義是什麼?

/** 
* Our own little min method, to avoid loading java.lang.Math if we've run 
* out of file descriptors and we're trying to print a stack trace. 
*/ 
private int min(int a, int b) { 
    if (a < b) return a; 
    return b; 
} 

這是什麼方法呢?加載java.lang.Math需要額外的文件描述符?

如果我編譯和-verbose:class

public class Main { 
    public static void main(String[] args) { 
    } 
} 

空運行程序我會在日誌中:

[Loaded java.lang.Math from /opt/jdk/jdk1.8.0_65/jre/lib/rt.jar] 
+1

哈! Probabaly於1995年撰寫。 – ZhongYu

+0

我認爲評論足夠描述。你的問題是什麼? – Tunaki

回答

2

如果您的JVM很早就失敗了,Math可能尚未加載。在調用main之前,您的JVM執行了大量的工作並運行了大量代碼。這意味着在你到達這一點之前很多人可能會出錯。

例如,這個簡單的程序

public class HowManyStrings { 
    public static void main(String[] args) throws IOException { 
     System.out.println("Hello world"); 
     System.in.read(); 
    } 
} 

創建大約10,000個對象。

http://vanillajava.blogspot.co.uk/2015/10/common-misconception-how-many-objects.html

2

錯誤是這樣說:

如果你已經用完文件描述符,同時嘗試打印堆棧跟蹤,並且調用Math.min(a, b),Math尚未由類加載器加載(不太可能,但可能發生,例如在啓動時),那麼你甚至無法生成堆棧跟蹤。所以他們直接將min添加到BufferedWriter類中以避免這種情況。

相關問題