Why is the default char buffer size of BufferedReader 8192?

前端 未结 4 1729
隐瞒了意图╮
隐瞒了意图╮ 2020-12-10 07:52

When I construct a new BufferedReader it is providing me a buffer of 8192 characters. What is the logic/reason behind this?

8192 = 2 to the powe         


        
4条回答
  •  感情败类
    2020-12-10 08:28

    Traditionally, memory managers and paging files in the operating system work on pages that are sized in powers of 2. This allows very efficient multiply/divide operations to be performed with left/right shift operations. When working with a buffer, the worst case scenario is to have a buffer with size 1 byte longer than the page size (that would result in an extra page swap with very low benefit). So the default buffer sizes will also tend to be implemented in factors of two.

    I'd assume (but have not checked) that the JVM looks for buffers like this and attempts to align them on page boundaries.

    Why does this matter? Page misses are quite expensive. If you are doing a ton of IO, it's better to avoid the case where the page backing the buffer gets swapped out to disk (kind of defeats the purpose of the buffer). That said, for most applications, this is a micro-optimization, and for the vast majority of cases, the default is fine.

    For reference, Windows and Linux both currently use a 4KB memory page size. So the default buffer on BufferedReader will consume exactly 2 pages.

提交回复
热议问题