弄了好多天了,一直弄不好 请高位大大帮忙看下,
通过其他软件检测到的我的getOtherDay的方法为:/**
 *@功能:获取某一天的前几天或后几天
*/
public static Date getOtherDay(Date date, int delay) {
try {
String mdate = "";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date d = format.parse(dateToString2(date));
long myTime = (d.getTime() / 1000) + delay * 24 * 60 * 60;
d.setTime(myTime * 1000);
mdate = format.format(d);
return format.parse(mdate);
} catch (Exception e) {
return null;
}
}
为什么CPU一直会占用这么高不下来呢?  还是我代码写得有问题?  

解决方案 »

  1.   

    说句老实说,我实在不知道你用SimpleDateFormat做什么?return new Date(date.getTime() + delay * 24 * 60 * 60 * 1000)就足够,你来回折腾这么多次另外,你lineTeamFirstRule才调用了626次,但是这个方法调用多次明显是有问题的。你应该想办法减少调用次数。
      

  2.   

    在这里面:simpledateformat.parse占了37.8%
    simpledateformat构造方法占了22.9%
    dateToString2占了17.2%
      

  3.   

    (1) 
    看方法的意图是天数增加delay
    可以用Calendar.add()(2) 
    如果不用Calendar,SimpleDateFormat()倒过来又倒过去是完全没有意义的浪费,可以直接在Date数据上操作。而且先除以1000再乘以1000也是无用的折腾。你可以这样:
    d.setTime(d.getTime()+delay*24*60*60*1000);(3)
    如果这个方法会被调用N多次,可以预先把24*60*60*1000计算出来存在一个变量里
      

  4.   

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    new一次就可以了吧。
      

  5.   

    我不知道你重复调用 format.parse(mdate)方法做啥里 所以cpu利用率会很高
      

  6.   

    lz是不是new了很多对象,一般不会这么高把
      

  7.   

    静态方法,不会new很多对象的吧
      

  8.   

    你可以考虑使用一个Map缓存曾经计算的结果就可以大量减少调用了,除非你最终计算结果中真的存在98,798,616种不同的时间