Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Tuning buffer sizes

DZone's Guide to

Tuning buffer sizes

· Java Zone
Free Resource

Download Microservices for Java Developers: A hands-on introduction to frameworks and containers. Brought to you in partnership with Red Hat.

When the typical read/write size is small, using a buffer can make a significant improvement in performance. However when reading/writing large amounts of data, additional buffered doesn't help and can add a small amount of overhead.

Additionally, it can be tempting to assume; the larger the buffer the better. However is appears a more modest buffer size, around the size of your L1 cache could be better. e.g 8 KB to 32 KB.


The test


In the following test I compared using buffered and unbuffered reads and writes to a temporary file on a tmpfs filesystem (ram disk)

Size of
read/write
Unbuffered
Writes
  Buffered
Writes
Unbuffered
Reads
  Buffered
Reads
1 2 MB/s 86 MB/s 3 MB/s 72 MB/s
2 4 MB/s 165 MB/s 6 MB/s 147 MB/s
4 8 MB/s 333 MB/s 11 MB/s 291 MB/s
8 17 MB/s 578 MB/s 24 MB/s 560 MB/s
16 34 MB/s 920 MB/s 49 MB/s 983 MB/s
32 67 MB/s 1,345 MB/s 99 MB/s 1,679 MB/s
64 133 MB/s 1,746 MB/s 198 MB/s 2,518 MB/s
128 254 MB/s 2,024 MB/s 391 MB/s 3,387 MB/s
256 463 MB/s 2,172 MB/s 742 MB/s 4,104 MB/s
512 798 MB/s 2,270 MB/s 1,334 MB/s 4,549 MB/s
1,024 1,270 MB/s 2,299 MB/s 2,355 MB/s 4,752 MB/s
2,048 1,789 MB/s 2,310 MB/s 3,704 MB/s 4,923 MB/s
4,096 2,287 MB/s 2,301 MB/s 5,324 MB/s 4,859 MB/s
8,192 2,589 MB/s 2,497 MB/s 6,346 MB/s 6,142 MB/s
16,384 2,534 MB/s 2,559 MB/s 5,764 MB/s 5,697 MB/s
32,768 2,591 MB/s 2,561 MB/s 5,793 MB/s 5,723 MB/s
65,536 2,613 MB/s 2,581 MB/s 5,861 MB/s 5,883 MB/s
131,072 2,580 MB/s 2,581 MB/s 5,401 MB/s 5,405 MB/s
262,144 1,918 MB/s 1,907 MB/s 3,269 MB/s 3,262 MB/s
524,288 1,749 MB/s 1,734 MB/s 2,845 MB/s 2,851 MB/s
1,048,576 1,471 MB/s 1,469 MB/s 2,501 MB/s 2,502 MB/s


The default size of a BufferedInputStream and BufferedOutputStream is 8KB. This is part of the reason why they don't help at this point and larger.


The code


BufferTest.java

 

From http://vanillajava.blogspot.com/2011/08/tuning-buffer-sizes.html

Download Building Reactive Microservices in Java: Asynchronous and Event-Based Application Design. Brought to you in partnership with Red Hat

Topics:

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}