San*_*hra 5 java bufferedreader
当我构造一个新的时,BufferedReader它为我提供了8192个字符的缓冲区。这背后的逻辑/原因是什么?
8192 = 2 to the power of 13
Run Code Online (Sandbox Code Playgroud)
传统上,操作系统中的内存管理器和页面文件在大小为2的幂的页面上工作。这允许使用左/右移位操作执行非常有效的乘/除操作。使用缓冲区时,最坏的情况是缓冲区的大小比页面大小长1个字节(这将导致额外的页面交换,但收益非常低)。因此,默认缓冲区大小也将倾向于以两倍为单位实现。
我假设(但尚未检查)JVM会寻找这样的缓冲区,并尝试在页面边界上对齐它们。
为什么这么重要?页面丢失非常昂贵。如果您要处理大量的IO,则最好避免将支持缓冲区的页面换出到磁盘的情况(这种做法会破坏缓冲区的用途)。就是说,对于大多数应用程序来说,这是一个微优化,对于大多数情况,默认值是可以的。
作为参考,Windows和Linux当前都使用4KB的内存页面大小。因此,BufferedReader上的默认缓冲区将恰好占用2页。
可以指定缓冲区大小,也可以使用默认大小。默认值足够大,足以满足大多数用途。
默认值被选择为“足够大”(我将其解释为“足够好”)。
| 归档时间: |
|
| 查看次数: |
2126 次 |
| 最近记录: |