Каков размер буфера по умолчанию для java.io.BufferedInputStream на старых и экзотических JVM?

Я провел небольшое исследование для сообщения в блоге о java.io.BufferedInputStream и буферах. Судя по всему, за эти годы значение по умолчанию выросло с ничтожных 512 байт до 8192 байт в (предположительно) реализации Sun Java 7 и даже было явно указано в JavaDocs в JDK 1.1.8 . Мой вопрос также вызвал вопросы кто/что решает, каким должно быть значение по умолчанию -- оно не такое черно-белое, как я ожидал.

Мне любопытно, какой размер буфера по умолчанию был в каждой версии и каким он может быть в других экзотических JVM. До сих пор я отслеживал это с помощью исходного кода, JavaDocs или отчетов об ошибках Sun для 1.0, 1.1, 1.4, Java 5, Java 6 и (опять же предположительно) Sun Java 7 JVM.

Что мне не удалось найти, так это значение для

  • Реализация JVM в Sun JDK 1.2
  • Реализация Sun JDK 1.3
  • Значение любой другой реализации (например, IBM или что-то еще)

Итак, мне было интересно, что это за значения и где я могу найти ссылку на них?

Или, если бы кто-то из SOpedians мог иметь доступ к одной из этих установок. Если да, не могли бы вы скомпилировать и запустить приведенный ниже код, а затем сообщить об этом здесь? Или вы знаете о

import java.io.BufferedInputStream;
import java.io.InputStream;

public class BufferSizeDetector extends BufferedInputStream {
    public static void main(String[] args) {
        BufferSizeDetector bsd = new BufferSizeDetector(null);

        System.err.println(System.getProperty("java.version"));
        System.err.println(bsd.getBufferSize());
    }

    public BufferSizeDetector(InputStream in) {
        super(in);
    }

    public int getBufferSize() {
        return super.buf.length;
    }
}

person Stu Thompson    schedule 19.01.2010    source источник


Ответы (4)


Mac OS X Tiger 10.7.0, виртуальная машина, предоставляемая Apple по умолчанию:

Java(TM) SE Runtime Environment (build 1.6.0_26-b03-383-11A511)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-383, mixed mode)

Потом:

1.6.0_26
8192
person Jean-Philippe Pellet    schedule 11.08.2011

Система:

Linux wart 2.6.33-rc1-00225-gc9f937e #2 Wed Dec 23 17:55:01 UTC 2009 armv5tel GNU/Linux
OpenJDK Runtime Environment (IcedTea6 1.4.1) (6b14-1.4.1-0ubuntu10)
OpenJDK Core VM (build 14.0-b08, interpreted mode)

Вывод из вашей программы:

1.6.0_0
8192
person Max A.    schedule 19.01.2010

Я не уверен, что вы надеетесь извлечь из этого урока, но поскольку он у меня перед глазами... Win32 IBM 1.4.2 JRE использует размер буфера 2048.

person McDowell    schedule 19.01.2010
comment
Отлично. Спасибо. (Вы все еще используете 1.4? Ой.) - person Stu Thompson; 20.01.2010

Запустите из моего IntelliJ в Windows 7:

  • JRE: 1.8.0_112-выпуск-724-b6 amd64
  • JVM: 64-разрядная виртуальная машина сервера OpenJDK от JetBrains s.r.o.
  • Виндовс 7 6.1

Вывод:

1.8.0_121
8192
person kevinarpe    schedule 10.03.2017