On Mon, 27 Mar 2023 16:18:22 GMT, Sergey Tsypanov <stsypa...@openjdk.org> wrote:
>> By default `BufferedInputStream` is constructed with internal buffer with >> capacity 8192. In some cases this buffer is never used, e.g. when we call >> `IS.readNBytes()` or `IS.readAllBytes()` (relying on `BIS.read1()`) or when >> `BufferedInputStream` is cascaded. > > Sergey Tsypanov has updated the pull request incrementally with one > additional commit since the last revision: > > 8304745: Add comments for benchmark Marked as reviewed by jpai (Reviewer). src/java.base/share/classes/java/io/BufferedInputStream.java line 181: > 179: byte[] buffer = buf; > 180: if (allocateIfEmpty && buffer == EMPTY) { > 181: buffer = new byte[initialSize]; It took me a few rounds of reading this code to realize that this array allocation will only be done once even when multiple threads are involved, because when `buffer == EMPTY` (i.e. `BufferedInputStream` is not subclassed), then the call to `getBufIfOpen(...)` always happens after acquiring the `lock`. So, only one thread will ever enter this block. Looks good to me. ------------- PR Review: https://git.openjdk.org/jdk/pull/13150#pullrequestreview-1372264626 PR Review Comment: https://git.openjdk.org/jdk/pull/13150#discussion_r1158097110