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

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

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

Я не смог найти это значение для

  • Реализация 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;
    }
}

Ответы [ 4 ]

5 голосов
/ 11 августа 2011

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
3 голосов
/ 20 января 2010

Система:

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
1 голос
/ 10 марта 2017

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

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

Выход:

1.8.0_121
8192
1 голос
/ 19 января 2010

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

...