2010-01-19 10 views
16

He estado investigando para una publicación de blog sobre java.io.BufferedInputStream y buffers. Aparentemente, a lo largo de los años, el valor predeterminado ha aumentado de 512 bytes a 8192 bytes a partir de (presuntuosamente) la implementación de Java 7 de Sun, e incluso se especificó explícitamente en el JavaDocs in JDK 1.1.8. Mi pregunta también generó preguntas del who/what deciedes what the default should be; no es tan negro y blanco como esperaba.¿Cuál es el tamaño de búfer predeterminado para java.io.BufferedInputStream en JVM antiguas y exóticas?

Tengo curiosidad por saber cuál ha sido el tamaño del búfer predeterminado en cada versión de la versión, y lo que puede ser en otras JVM exóticas. Hasta ahora lo he rastreado, a través de código fuente, JavaDocs o informes de errores de Sun para 1.0, 1.1, 1.4, Java 5, Java 6 y (presuntuosamente otra vez) Sun Java JVM.

Lo que yo he fallado a subir este valor es de

  • Sun JDK 1.2 de la aplicación JVM
  • aplicación de JDK 1.3
  • valor
  • Sun Cualquier otra aplicación (como IBM o algo else)

Entonces, me preguntaba cuáles son esos valores y dónde podría encontrar una referencia a ellos?

O, que, en caso de que existan, los SOpedians puedan tener acceso a una de estas instalaciones. Si es así, ¿podría compilar y ejecutar el siguiente código y luego informar aquí? O, ¿sabes de

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; 
    } 
} 
+2

Esto se debe marcar como Wiki de la Comunidad. Además, puede descargar versiones archivadas de Sun JDK aquí: http://java.sun.com/products/archive/ – BalusC

+0

Sí, pero eso es mucho trabajo ...Estoy en una Mac y terminaría lanzando instancias de EC2, instalando la JVM, yada, yada, yada. (Soy flojo de esa manera.) –

+0

¿Wiki de la comunidad? Esto es solo una solicitud de colaboración, no una pregunta. – BalusC

Respuesta

1

No estoy seguro de lo que espera aprender de esto, pero ya lo tengo frente a mí ... un Win32 IBM JRE 1.4.2 utiliza un tamaño de búfer de 2048.

+0

Excelente. Gracias. (¿Todavía está codificando a 1.4? * Ouch. *) –

3

El sistema:

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) 

La salida de su programa:

1.6.0_0 
8192 
+0

IcedTea ... genial. No pensé en eso. –

5

Mac OS X Tiger 10.7.0, proporcionado por Apple por defecto VM:

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) 

continuación:

1.6.0_26 
8192 
1

Ejecutar desde mi IntelliJ en Windows 7:

  • JRE: 1.8.0_112-release-724-B6 amd64
  • JVM: OpenJDK 64 bits del servidor VM por JetBrains sro
  • Windows 7 6.1

salida:

1.8.0_121 
8192 
Cuestiones relacionadas