2010-01-19 14 views
16

Ho fatto qualche ricerca per un post sul blog riguardante java.io.BufferedInputStream e buffer. Apparentemente, nel corso degli anni, il valore predefinito è passato da 512 byte a 8192 byte a (presumibilmente) implementazione Java 7 di Sun ed è stato persino specificato esplicitamente nello JavaDocs in JDK 1.1.8. La mia domanda ha anche sollevato domande su who/what deciedes what the default should be - non è nero-n-bianco come mi aspettavo.Quali sono le dimensioni del buffer predefinito per java.io.BufferedInputStream su JVM vecchie ed esotiche?

Sono curioso di sapere come quale sia la dimensione del buffer predefinita per ciascuna versione e cosa possa essere in altre JVM esotiche. Finora l'ho rintracciato, tramite codice sorgente, JavaDocs o segnalazioni di bug di Sun per 1.0, 1.1, 1.4, Java 5, Java 6 e (presumibilmente di nuovo) Java 7 JVM di Sun.

Quello che ho omesso di alzare è questo valore per

  • Sun JDK 1.2 di implementazione JVM
  • Sun JDK 1.3 implementazione di
  • il valore di qualsiasi altra applicazione (come IBM o qualcosa altro)

Quindi, mi chiedevo quali sono questi valori e dove posso trovare un riferimento a loro?

Oppure, a parte questo, se qualche SOpediano là fuori potrebbe avere accesso a una di queste installazioni. In tal caso, potresti compilare ed eseguire il codice seguente, e poi riportare qui? O, sai di

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

Questo dovrebbe essere contrassegnato come Comunità Wiki. Inoltre, è possibile scaricare qui le versioni SunJDK archiviate qui: http://java.sun.com/products/archive/ – BalusC

+0

Sì, ma è molto lavoro ...Sono su un Mac e finirei per dare il via alle istanze EC2, installando la JVM, yada, yada, yada. (Sono pigro in questo modo.) –

+0

Wiki di comunità? Questa è solo una richiesta di collaborazione, non una domanda. – BalusC

risposta

1

Non sono sicuro di che cosa sperate di imparare da questo, ma dal momento che ce l'ho di fronte a me ... un win32 IBM 1.4.2 JRE utilizza una dimensione del buffer di 2048.

+0

Eccellente. Grazie. (Stai ancora programmando a 1.4? * Ouch. *) –

3

Il 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) 

L'uscita dal programma:

1.6.0_0 
8192 
+0

IcedTea ... cool. Non ci ho pensato. –

5

Mac OS X Tiger 10.7.0, di default di Apple fornito 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) 

Poi:

1.6.0_26 
8192 
1

Esecuzione dal IntelliJ in Windows 7:

  • JRE: 1.8.0_112-release-724-b6 amd64
  • JVM: OpenJDK 64-bit di server VM JetBrains sro
  • Windows 7 6.1

uscita:

1.8.0_121 
8192 
Problemi correlati