语不惊人死不茠 2018-08-16 01:20 采纳率: 100%
浏览 682
已采纳

请教一个关于Spring-task定时任务的问题

List companyList=getCompanyList();
for(JSONObject company:companyList){
List todayBirthdays=getBirthdayUsers(getdate(0),company.getString("id"));
StringBuffer name=new StringBuffer();
StringBuffer ids=new StringBuffer();
StringBuilder hrsb = new StringBuilder();
ids.append("'");
ids.append("2017121618514C22B68296F31AF8DDE2");//不给XX发
ids.append("'");
ids.append(",");
String userIds ="";
if(todayBirthdays.size()>0){
for (JSONObject o : todayBirthdays) {
name.append(",");
name.append(o.getString("name"));
ids.append("'");
ids.append(o.getString("id"));
ids.append("'");
ids.append(",");
}
userIds = ids.toString().substring(0, ids.toString().length() - 1);
if (name.length() > 0) {
name.deleteCharAt(0);
}
List remindUsers=userDao.getViewJSONListByCondition(" AND companyId=? AND jobState!=1 AND id NOT in("+userIds+") GROUP BY id",new Object[]{company.getString("id")});
for (JSONObject hrUser : remindUsers) {
hrsb.append("|");
hrsb.append(hrUser.getString("id"));
}
if (hrsb.length() > 0) {
hrsb.deleteCharAt(0);
}
JSONObject msgObject = new JSONObject();
msgObject.put("userIds", hrsb);//object.getString("id")
msgObject.put("content", String.format(TODAY_BIRTHDAY_REMIND, name));
tokenDao.sendTextMsg(JSON.toJSONString(msgObject));
}

# 上面的代码,定时任务执行上边代码。我想问问这个会导致服务器占用内存爆炸吗。。是不是因为Stringbuilder的原因,之前手抖没看到怎么写了个Stringbuilder

第二天8.00执行 服务器ok,8.30左右服务器报错数据库连接最大,内存占用到了80%
我想问问是不是这个导致的

  • 写回答

4条回答 默认 最新

  • _zming 2018-08-16 02:17
    关注

    不知道你定时任务是多久执行一次,其次你得最好打印下生成后的字符数量,如果字符确实很长,而且任务执行频繁会耗费内存,问题不在于StringBuffer,而在于你怎么用,StringBuffer是可以循环利用的,当你用完后可以通过setLength(0)进行清空,方便内存释放,不需要每次for循环都去创建实例,每创建一个实例都会导致一定数量的字符数组的创建。所有创建一次就够了,使用setLength(0)后方可重新使用

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况