Slow readng tzdb.dat

Salter, Thomas A Thomas.Salter at unisys.com
Wed Oct 9 17:08:50 UTC 2013


I noticed recently that the JDK8 JVM was very slow starting on systems where the JRE is on a high-latency, remote file system.  I tracked this down to the reading of tzdb.dat.  In java/time/zone/TzdbZoneRulesProvider.java and sun/util/calendar/ZoneInfoFile.java the tzdb.dat file is read using a DataInputStream directly over a FileInputStream.  Consequently there ends up being a large number of very small (often a single byte) read requests to the underlying O/S file system.  This can be fixed trivially by adding a BufferedInputStream between the DataInputStream and the FileInputStream.

Thus this:
  try (DataInputStream dis = new DataInputStream(                   
           new FileInputStream(new File(libDir, "tzdb.dat")))) {    
becomes:
  try (DataInputStream dis = new DataInputStream(                          
      new BufferedInputStream(
           new FileInputStream(new File(libDir, "tzdb.dat")), 32000))) {   


  
Tom Salter  |  Software Engineer  |  Java & Middleware Development 
Unisys  |  2476 Swedesford Road  |  Malvern, PA  19355   |  610-648-2568 |  N385-2568 





More information about the core-libs-dev mailing list