2016-02-13 1 views
1

En java.io.BufferedWriter il existe une méthode:Quel est le but de 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; 
} 

Quel est le point de cette méthode? Descripteur de fichier supplémentaire requis pour charger java.lang.Math?

Si je compiler et exécuter le programme vide avec -verbose:class

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

Je vais obtenir dans les journaux:

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

Ha! Probabaly écrit en 1995. – ZhongYu

+0

Je pense que le commentaire est assez descriptif. Quelle est ta question? – Tunaki

Répondre

2

Si votre machine JVM échoue très tôt, il est possible que Math ne soit pas encore chargé. Votre JVM fait énormément de travail et exécute beaucoup de code avant d'appeler main. Cela signifie que beaucoup de choses peuvent mal tourner avant d'arriver à ce point.

Par exemple, ce programme simple

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

crée environ 10 000 objets.

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

2

L'erreur dit ceci:

Si vous aviez à court de fichier Descripteurs en essayant d'imprimer une trace de pile, et vous avez appelé Math.min(a, b), et Math n'a pas encore été chargé par le chargeur de classe (peu probable mais pourrait arriver, par exemple au démarrage), vous ne pourrez même pas générer la trace de la pile. Donc, ils ont ajouté min directement à la classe BufferedWriter pour éviter cela.