【问题标题】:What's the point of java.io.BufferedWriter.min(int a, int b)?java.io.BufferedWriter.min(int a, int b) 有什么意义?
【发布时间】:2016-05-24 22:24:07
【问题描述】:

java.io.BufferedWriter中有一个方法:

/**
 * 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]

【问题讨论】:

  • 哈!可能写于 1995 年。
  • 我认为该评论的描述性已经足够了。你有什么问题?

标签: java java-io bufferedwriter


【解决方案1】:

错误是这样说的:

如果您在尝试打印堆栈跟踪时用完了文件描述符,并且您调用了Math.min(a, b),并且类加载器尚未加载 Math(不太可能但可能发生,例如在启动时),那么您将'甚至无法生成堆栈跟踪。因此他们将min 直接添加到BufferedWriter 类中以避免这种情况。

【讨论】:

    【解决方案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

    【讨论】:

      猜你喜欢
      • 2014-10-19
      • 2010-10-11
      • 1970-01-01
      • 2023-01-24
      • 2015-03-20
      • 2019-03-23
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      相关资源
      最近更新 更多