public class test
{
    public static void main(String[] args) throws Exception
    {
     File infile = new File(args[0]);
    if(infile.exists())
     {
      FileReader fr = new FileReader(infile);
       String str=" ";
      try
        {
         BufferedReader br = new BufferedReader(fr);
        while((str=br.readLine()) != null)
          {
           ;
          }
         br.close();
        }catch (FileNotFoundException e) {System.out.println("file not found");}
      fr.close();
     }
    }
}
这个程序读一个50M的文件开机后第一次执行1.5秒,然后第二次1秒,希望开机首次执行就能达到1秒,有可能吗?

解决方案 »

  1.   

    基本上没有。第二次只需要1秒,基本上是因为该文件主体已经进入操作系统的磁盘缓存中,所以第二次读取过程就会大大加快。如果你非想确认下这个过程,可以先用工具创建个 内存盘(RamDisk),将该文件复制到内存盘中,然后再测试你的程序,那么磁盘IO的时间会彻底被消灭掉,只需要消耗点IO通道和CPU时间而已。
      

  2.   

    不过,如果你仅考虑增加文件读取速度的话,其实可以不要用Reader,因为这个还略微带了些 字符转换的CPU开销,直接用FileInputStream,每次按块读取,比如 byte[32*1024]来读取,那么全过程基本只有磁盘IO在消耗时间而已,连字符转换的时间都节省掉了。 
      

  3.   

    继续问,比如能否通过JVM的配置提升性能?比如 -Xms -Xmx 等 ?
      

  4.   

    对于你的程序来讲配置 -Xms -Xmx 应该是效果不太明显,因为毕竟你没把太多数据缓存到内存当中