JDK-4489049 : InputStreamReader performance has severely dropped from 1.3.1 to 1.4
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.io
  • Affected Version: 1.4.0
  • Priority: P2
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_2000
  • CPU: x86
  • Submitted: 2001-08-07
  • Updated: 2013-11-01
  • Resolved: 2001-08-07
Related Reports
Duplicate :  
Description
ingrid.yao@Eng 2001-08-07



J2SE Version (please include all output from java -version flag):

  Tested on: 1.4_beta (build 1.4.0-beta-b65, mixed mode)
             and
             1.4_cap_b72 (build 1.4.0-beta_refresh-b72, mixed mode)

Does this problem occur on J2SE 1.3?  Yes / No (pick one)

  No.

Operating System Configuration Information (be specific):

   Windows 2000SP2, same problem on Solaris Sparc

Hardware Configuration Information (be specific):

   PIII-800, 256MB RAM, IDE Disk, NTFS filesystem

Bug Description:

   InputStreamReader performance has severely dropped from 1.3.1 to 1.4
   probably because of the use of NIO.

   Results for JDK 1.3.1:

   C:\java\jdk1.3.1\bin\javaw.exe -classpath "C:\temp\iospeed" IOSpeedTest
   Time for reading (1): 531 ms
   Time for reading (2): 440 ms
   Time for reading (3): 451 ms

   Results for JDK 1.4 public beta:

   C:\java\jdk1.4\bin\javaw.exe -classpath "C:\temp\iospeed" IOSpeedTest
   Time for reading (1): 1753 ms
   Time for reading (2): 1853 ms
   Time for reading (3): 1732 ms

   Results for JDK 1.4 build 72:

   C:\java\jdk1.4cap\bin\javaw.exe -classpath "C:\temp\iospeed" IOSpeedTest
   Time for reading (1): 1041 ms
   Time for reading (2): 992 ms
   Time for reading (3): 1111 ms

   As you can see the public beta is about 4 times slower than 1.3.1 when
   reading files and the latest CAP build still needs more than twice as much
   time for the same task.

Steps to Reproduce (be specific):

   Run the attached Java program(IOSpeedTest.java) and observe the results 
   for JDK 1.3.1 and JDK1.4.

Test program:

import java.io.*;
import java.util.*;

public class IOSpeedTest
{
	public static void main(String[] args) throws IOException
	{
		// This test creates a 10 MB text file and afterwars reads it.
		// The speed of reading is much slower with Merlin than with JDK 1.3.1
		
		String filename = "test.txt";
		
		String encoding = "US-ASCII";
		
		Writer writer = new OutputStreamWriter(new FileOutputStream(filename),encoding);
		char[] buffer = new char[10000];
		for (int i = 0; i < 1000; i++) writer.write(buffer);
		writer.close();
		
		
		for (int i=1;i<=3;i++)
		{
			long time = System.currentTimeMillis();
			
			Reader reader = new InputStreamReader(new FileInputStream(filename),encoding);
			while (reader.read(buffer) != -1);
			reader.close();
			
			System.out.println("Time for reading ("+i+"): " + (System.currentTimeMillis() - time) + " ms");
		}
	}
}



Comments
EVALUATION Another instance of the general charset performance issue (4401956). -- mr@eng 2001/8/7
08-09-0173