2010-02-24 11 views

Respuesta

66

¿ByteArrayOutputStream.close() realmente libera la memoria?

No. No hace absolutamente nada. Usted puede mirar en su código fuente:

public void close() throws IOException { 
} 

Para liberar la memoria, asegúrese de que no hay referencias a ella y dejar que el recolector de basura haga su trabajo. Al igual que con cualquier otro objeto normal.

Las transmisiones basadas en archivos y sockets son especiales porque utilizan recursos del SO que no son de memoria (manejadores de archivos) que pueden agotarse independientemente de la memoria. Es por eso que cerrarlos explícitamente es importante. Pero esto no se aplica a la ByteArrayOutputStream puramente basada en la memoria.

+4

(los recursos del montón C también son importantes, por ejemplo, transmitir en 'java.util.zip' por desgracia). –

Cuestiones relacionadas