在旧的和异国情调的JVM上,java.io.BufferedInputStream的默认缓冲区大小是多少?

时间:2010-01-19 17:00:01

标签: java history bufferedinputstream

我一直在研究关于java.io.BufferedInputStream和缓冲区的博客文章。显然,多年来,默认情况下,从(意外地) Sun的Java 7实现开始,默认值从512字节增长到8192字节,甚至在JavaDocs in JDK 1.1.8中明确指定。我的问题也带来了who/what deciedes what the default should be的问题 - 它并不像我预期的那样黑白。

我很好奇每个版本发布时的默认缓冲区大小,以及它在其他异乎寻常的JVM中的含义。到目前为止,我已经通过源代码,JavaDocs或Sun bug报告跟踪了它,包括1.0,1.1,1.4,Java 5,Java 6和(再次推测) Sun的Java 7 JVM。

我未能提出的是

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

所以,我想知道这些价值是什么以及我在哪里可以找到它们的参考资料?

或者说,如果那里有任何SOped人可能有权访问其中一个安装。如果是这样,你可以编译并运行下面的代码,然后在这里报告吗?或者,你知道吗

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

系统:

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

答案 2 :(得分:1)

我不确定你希望从中学到什么,但是因为我把它放在我面前...... win32 IBM 1.4.2 JRE使用的缓冲区大小为2048

答案 3 :(得分:1)

从Windows 7中的IntelliJ运行:

  • JRE:1.8.0_112-release-724-b6 amd64
  • JVM:JetBrains s.r.o
  • 的OpenJDK 64位服务器VM
  • Windows 7 6.1

输出:

1.8.0_121
8192