java.nio

La nueva libreria de entrada/salida introducida con la versión 1.4 de Java es una de esas novedades que ha pasado un poco desapercibida.

La principal razón es que su utilidad se encuentra realmente en un segmento bastante específico de aplicaciones. En realidad, cualquier aplicación podria beneficiarse de un aumento de velocidad usando NIO, pero como las librerias clásicas de entrada/salida ya utilizan parte de las novedades internamente, la ventaja se nota con el simple uso de la version 1.4

Se pueden resumir las ventajas de java.nio en dos principalmente:

  • E/S multiplexada, no bloqueante
  • Acceso a buffers directos (zero copy)Básicamente las aplicaciones que comento que pueden beneficiarse son principalmente aquellas con gran E/S y muchas conexiones simultaneas (java.nio rompe el 1:1 entre hilos y conexiones entrantes).

JavaOne 2003 Technical Session (Benchmark)

  • Apache 2.0.42 for small file (1 KB)
  • thttpd 2.20c for large file (1 MB throttled to 56kb/sec)
  • Java 1.4.2 amb java.nio i java.ioLa versión clásica con java.io obtenia un rendimiento equiparable a los otros dos productos, sin embargo su consumo de memoria crecia linealmente con el número de conexiones hasta llegar a los 600MB cuando el thttpd consumia sólo 8.

La versión java.nio con selector no bloqueante ofrece un rendimiento a la par con las otras soluciones y un uso de memoria fijo que no aumenta con el número de conexiones.