我一直在研究关于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。
我未能提出的是
的这个值所以,我想知道这些价值是什么以及我在哪里可以找到它们的参考资料?
或者说,如果那里有任何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;
}
}
答案 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运行:
输出:
1.8.0_121
8192