2016-05-24 63 views

回答

2

傳統上,操作系統中的內存管理器和分頁文件在大小爲2的冪的頁面上工作。這允許使用左/右移操作來執行非常有效的乘/除操作。使用緩衝區時,最糟糕的情況是使緩衝區的大小比頁面大小長1個字節(這會導致額外的頁面交換,但效益很低)。因此,默認緩衝區大小也傾向於以兩個因子實現。

我假設(但沒有檢查)JVM尋找像這樣的緩衝區並嘗試在頁面邊界上對齊它們。

這是爲什麼?頁面丟失相當昂貴。如果你正在做大量的IO,最好避免支持緩衝區的頁面被換出到磁盤的情況(這種情況會破壞緩衝區的目的)。這就是說,對於大多數應用程序來說,這是一個微型優化,對絕大多數情況來說,默認情況很好。

僅供參考,Windows和Linux均使用4KB內存頁面大小。因此,BufferedReader上的默認緩衝區將佔用2頁。

1

由於BufferedReader Javadoc說可被指定

緩衝區大小,或者可以使用默認大小。默認值對於大多數目的而言足夠大。

默認選擇爲「足夠大」(我會解釋爲「足夠好」)。

0

8192,正如你所說的,是2^13。這個數字是默認的確切原因很難得出,但我敢說這是基於正常使用場景和數據效率的結合。儘管如此,您可以使用不同的對象構造函數來指定所需的緩衝區大小。

BufferedReader(Reader in, int sz) 

創建使用指定大小的輸入緩衝區的緩衝字符輸入流。

https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.htmlBufferedReader default buffer size?將提供進一步的見解。

相關問題