为什么 BufferedReader 的默认 char 缓冲区大小是 8192?
Why is the default char buffer size of BufferedReader 8192?
当我构建一个新的 BufferedReader
时,它为我提供了一个 8192 个字符的缓冲区。这背后的logic/reason是什么?
8192 = 2 to the power of 13
The buffer size may be specified, or the default size may be used. The default is large enough for most purposes.
默认值被选择为 "large enough"(我会 将 解释为 "good enough")。
8192,如你所说,是2^13。这个数字成为默认值的确切原因很难得出,但我敢说这是基于正常使用场景和数据效率的结合。不过,您可以使用不同的对象构造函数指定任意大小的缓冲区。
BufferedReader(Reader in, int sz)
创建使用指定大小的输入缓冲区的缓冲字符输入流。
https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html
BufferedReader default buffer size? 将提供进一步的见解。
传统上,操作系统中的内存管理器和分页文件在大小为 2 的幂的页面上工作。这允许使用 left/right 移位操作执行非常高效的 multiply/divide 操作。使用缓冲区时,最坏的情况是缓冲区的大小比页面大小长 1 个字节(这将导致额外的页面交换,但收益非常低)。因此默认缓冲区大小也将倾向于以两倍的形式实现。
我假设(但尚未检查)JVM 寻找这样的缓冲区并尝试将它们对齐到页面边界。
为什么这很重要?页面未命中的代价非常高。如果您正在进行大量 IO,最好避免支持缓冲区的页面换出到磁盘的情况(有点违背缓冲区的目的)。也就是说,对于大多数应用程序来说,这是一个微优化,对于绝大多数情况,默认值就可以了。
作为参考,Windows 和 Linux 目前都使用 4KB 内存页大小。所以 BufferedReader 上的默认缓冲区将恰好占用 2 页。
8192 是 2^13 并且还揭示了很多关于我们所做的所有编码的正确与错误的信息。如果一个人拿走了或增加了作者的意图,他就修改并因此破坏了整个事情。尝试添加或删除一些完美的东西......祝你好运!
当我构建一个新的 BufferedReader
时,它为我提供了一个 8192 个字符的缓冲区。这背后的logic/reason是什么?
8192 = 2 to the power of 13
The buffer size may be specified, or the default size may be used. The default is large enough for most purposes.
默认值被选择为 "large enough"(我会 将 解释为 "good enough")。
8192,如你所说,是2^13。这个数字成为默认值的确切原因很难得出,但我敢说这是基于正常使用场景和数据效率的结合。不过,您可以使用不同的对象构造函数指定任意大小的缓冲区。
BufferedReader(Reader in, int sz)
创建使用指定大小的输入缓冲区的缓冲字符输入流。
https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html BufferedReader default buffer size? 将提供进一步的见解。
传统上,操作系统中的内存管理器和分页文件在大小为 2 的幂的页面上工作。这允许使用 left/right 移位操作执行非常高效的 multiply/divide 操作。使用缓冲区时,最坏的情况是缓冲区的大小比页面大小长 1 个字节(这将导致额外的页面交换,但收益非常低)。因此默认缓冲区大小也将倾向于以两倍的形式实现。
我假设(但尚未检查)JVM 寻找这样的缓冲区并尝试将它们对齐到页面边界。
为什么这很重要?页面未命中的代价非常高。如果您正在进行大量 IO,最好避免支持缓冲区的页面换出到磁盘的情况(有点违背缓冲区的目的)。也就是说,对于大多数应用程序来说,这是一个微优化,对于绝大多数情况,默认值就可以了。
作为参考,Windows 和 Linux 目前都使用 4KB 内存页大小。所以 BufferedReader 上的默认缓冲区将恰好占用 2 页。
8192 是 2^13 并且还揭示了很多关于我们所做的所有编码的正确与错误的信息。如果一个人拿走了或增加了作者的意图,他就修改并因此破坏了整个事情。尝试添加或删除一些完美的东西......祝你好运!