不稳定态maj
2019-05-30 21:07
采纳率: 0%
浏览 2.1k

求问java处理大量数据的时候处理速度越来越慢怎么办?

代码大概是这样的 就是构造一个轨道系统,其中createAthlete方法就是new一个对象,然后addo就是add到一个arraylist里
在读1000条数据以内时候就几毫秒构造一条,在读到七八千条数据的时候就特别特别慢了。想知道要怎么加快后面的处理速度呢?(一共要处理50w条数据)

(这是几千条后打印的时间:

构造Athlete ::= 时间:777ms

构造Athlete ::= 时间:728ms

构造Athlete ::= 时间:444ms

构造Athlete ::= 时间:764ms

构造Athlete ::= 时间:703ms

构造Athlete ::= 时间:730ms

构造Athlete ::= 时间:426ms

构造Athlete ::= 时间:797ms

构造Athlete ::= 时间:951ms

构造Athlete ::= 时间:266ms

构造Athlete ::= 时间:1853ms

构造Athlete ::= 时间:715ms

 for(int k=0;k<arrayList.size();k++){
      long startTime1 = System.currentTimeMillis(); 
      line=arrayList.get(k);
      String pattern = "(\\w+)(\\W+)(.*)";
      Pattern r = Pattern.compile(pattern);
      Matcher m = r.matcher(line);
      if(m.find()) {
          if(m.group(1).equals("Game")) {
              cir.addCenter(m.group(3));
          }
          else if(m.group(1).equals("Athlete")) {
              String line1=m.group(3);
              String pattern1 = "(\\w+),(\\d+),(\\w+),(\\d+),(\\d+.\\d+)>";
              Pattern r1 = Pattern.compile(pattern1);
              Matcher m1 = r1.matcher(line1);
              if(m1.find()) {
                  Athlete athlete=physicalObject.createAthlete(m1.group(1),Integer.parseInt(m1.group(2)),m1.group(3),Integer.parseInt(m1.group(4)),Double.parseDouble(m1.group(5)));
                 cir.addo(athlete);
              }
          }
          else {
              int a=Integer.parseInt(m.group(3).trim());
             for(int i=0;i<a;i++) {
                 cir.addTrack();
             }
         }
      }
      long endTime1 = System.currentTimeMillis();
      System.out.println("构造"+line+"时间:" + (endTime1 - startTime1) + "ms"); 
    }

  }
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • threenewbee 2019-05-30 23:55

    大量小的对象的创建会导致性能非常低,这是因为内存碎片造成的。
    解决这个问题有几个办法,具体要根据你的场景。
    首先,可以考虑使用享元模式。
    其次,如果大量的对象的所有字段都是一样的,这时如果可以封闭掉所有对对象的修改(set函数),这个时候可以通过创建不变对象(只允许构造函数一次性赋值,不允许更改)的方式,让所有相同的对象共享同一个实例。减少对象创建的开销。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题