19

我一直在为一篇关于java.io.BufferedInputStream缓冲区的博客文章做一些研究。显然,多年来,在 Sun 的 Java 7 实现中,默认值已从微不足道的 512 字节增长到 8192 字节,甚至在 JDK 1.1.8 的 JavaDocs 中明确指定。我的问题还提出了谁/什么决定了默认值应该是什么的问题——它不像我预期的那样黑白分明。

我很好奇每个版本的默认缓冲区大小是多少,以及它在其他异国情调的 JVM 中可能是什么。到目前为止,我已经通过源代码、JavaDocs 或 Sun 的 1.0、1.1、1.4、Java 5、Java 6 和(假定再次) Sun 的 Java 7 JVM 的错误报告来追踪它。

我没有出现的是这个值

  • Sun JDK 1.2 的 JVM 实现
  • Sun JDK 1.3 的实现
  • 任何其他实现的价值(如 IBM 或其他)

所以,我想知道这些值是什么以及在哪里可以找到对它们的引用?

或者,如果有任何 SOpedians 可能可以访问这些装置之一,那就是裸露的。如果是这样,你能编译并运行下面的代码,然后在这里报告吗?或者,你知道

import java.io.BufferedInputStream;
import java.io.InputStream;

public class BufferSizeDetector extends BufferedInputStream {
    public static void main(String[] args) {
        BufferSizeDetector bsd = new BufferSizeDetector(null);

        System.err.println(System.getProperty("java.version"));
        System.err.println(bsd.getBufferSize());
    }

    public BufferSizeDetector(InputStream in) {
        super(in);
    }

    public int getBufferSize() {
        return super.buf.length;
    }
}
4

4 回答 4

5

Mac OS X Tiger 10.7.0,Apple 提供的默认 VM:

Java(TM) SE Runtime Environment (build 1.6.0_26-b03-383-11A511)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-383, mixed mode)

然后:

1.6.0_26
8192
于 2011-08-11T16:36:57.060 回答
4

系统:

Linux wart 2.6.33-rc1-00225-gc9f937e #2 Wed Dec 23 17:55:01 UTC 2009 armv5tel GNU/Linux
OpenJDK Runtime Environment (IcedTea6 1.4.1) (6b14-1.4.1-0ubuntu10)
OpenJDK Core VM (build 14.0-b08, interpreted mode)

程序的输出:

1.6.0_0
8192
于 2010-01-19T21:23:41.470 回答
2

我不确定你希望从中学到什么,但既然我面前有它……win32 IBM 1.4.2 JRE 使用的缓冲区大小为2048.

于 2010-01-19T17:24:05.847 回答
1

在 Windows 7 中从我的 IntelliJ 运行:

  • JRE:1.8.0_112-release-724-b6 amd64
  • JVM:JetBrains sro 的 OpenJDK 64 位服务器 VM
  • 视窗 7 6.1

输出:

1.8.0_121
8192
于 2017-03-10T04:00:53.073 回答