【问题标题】:How to make my java program run faster?如何让我的java程序运行得更快?
【发布时间】:2017-09-09 19:00:37
【问题描述】:

此程序在我的设备上运行时间为 0.099 秒。我想在 0.01 秒内运行它。如何做到这一点。它可能与读写流有关。这个程序基本上是接受一个字符串,并在方法calc中对字符串的字符一个一个地进行一些操作,并返回一些int值。你真的不需要理解代码。如果有任何优化必须发生在 i/o 流或方法内部。我想不出任何其他需要进行这种优化的地方。

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

class ride{
static int calc(String s){
char[] d=new char[s.length()];
s.getChars(0,s.length(),d,0);
int sum=1;
for(char c:d){
sum*=(c-'A'+1);
}
return sum%47;
}



public static void main(String args[]){
try{
BufferedReader br=new BufferedReader(new FileReader("ride.in"));
FileWriter fw=new FileWriter("ride.out");
String s;
while((s=br.readLine())!=null){
if(calc(s)==calc(br.readLine())){
fw.write("GO\n");
}
else
fw.write("STAY\n");
}
fw.close();
}
catch(IOException e){
System.out.println(e);
}
}
}

【问题讨论】:

  • 总和还是积? sum*= or sum+= 另外请修正格式
  • 显然,您的重点应该放在可读性、可维护性和健壮性上。不在性能上。您的代码没有缩进,不尊重 Java 命名约定,使用晦涩的单字母变量名,并且不关闭其文件流。一个快速但无法维护的错误程序是没有用的。还不清楚您如何衡量运行它所花费的时间。我的猜测是大部分时间都花在启动 JVM 上。
  • 如果您正确缩进程序,它们会运行得更快。 (好吧......这是一个谎言......但无论如何你要求别人阅读它之前正确缩进你的代码。)
  • 我的直觉是 JB Nizet 是对的。此外,我的直觉是,如果您希望程序在 0.01 秒内启动/运行/完成,您需要用一种可以编译为本地二进制文件的语言编写它。这排除了 Java。
  • @StephenC ... 除非您将 Java 编译为本机二进制文件(excelsiorjet.com;iOS 上的代号)。但它仍然可能比要求的要慢。

标签: java optimization file-io


【解决方案1】:

给 bufferReader 更大的缓冲区大小,可能 80k 或更多,取决于你可用的内存:

BufferedReader br=new BufferedReader(new FileReader("ride.in"), 81920);

【讨论】:

    【解决方案2】:

    由于您使用的是 BufferedReader 实例,因此您的性能不足可能不是由于 I/O 造成的(即使在读取多个 char 时,也只会对底层操作系统进行少量系统调用)。当然,这取决于文件长度。

    因此,为了获得更好的性能,请尝试开始使用 calc 函数。例如,您可以避免计算长度两次。

    【讨论】:

      猜你喜欢
      • 2017-03-19
      • 2018-08-23
      • 2021-05-11
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      相关资源
      最近更新 更多