스스로 파낸 구덩이를 스스로 채우다--JVM 보고 메모리 넘침

4997 단어
타이밍 임무를 작성할 때 테이블 데이터에 대해 대량 조작을 한다. 테스트 데이터는 10만 개 정도이고 테스트를 할 때 뛰어다니면서 메모리가 넘치는 현상이 나타난다. 마지막에 창설된 대상인paramList와 tmBeanList가 회수되지 않은 것을 발견했다. 자료 검색을 통해 순환 내에 대상 인용을 계속 만들지 말아야 한다는 것을 발견했다. 그렇지 않으면count의 순환이 있고 메모리에count의 대상 인용이 존재하기 때문에 메모리가 소모된다.그래서 매번 순환이 끝날 때마다 대상 인용을 삭제해야 한다(null로 설정).또는 for 순환 체외에서 대상을 직접 성명하고 순환 체내에서 대상을 만드는 인용입니다. 이렇게 하면 메모리에 대상 인용이 한 개만 있고, new 대상이 있을 때마다 대상 인용은 다른 방향을 가리키지만 메모리에 한 개만 있습니다.
/**
 *  ,xxxx
 * @author xxx
 * @date xxx
 * @version xxx
 */
@Component(value = "xxxJob")
public class xxxJob {

    @Transactional
    public void doService(Map scheduleJob) {
        logger.info("------------ ,xxxxx----------");
        //  
        --- ---
        for (Map map : list) {
            try {
                --- ---
                List> tmBeanList = tMemberRfmDao.queryBeanForMap(tmr);
                List> paramList = new ArrayList<>();
                if (!CollectionUtils.isEmpty(tmBeanList)) {
                    --- ---
                    for (Map member : tmBeanList) {
                        String memberId = (String) member.get("member_id");
                        Map tml = new HashMap<>();
                        --- ---
                        tml.put("data_status", 0);
                        tml.put("create_time",
                                DateUtils.getDate("yyyy-MM-dd HH:mm:ss"));
                        tml.put("update_time",
                                DateUtils.getDate("yyyy-MM-dd HH:mm:ss"));
                        paramList.add(tml);
                        if(paramList.size() == INT_TWO_THOUSAND){
                            tMemberLabelDao.saveBatch(paramList);
                            paramList.clear();
                        }
                    }
                    if(paramList.size() != 0){
                        tMemberLabelDao.saveBatch(paramList);
                    }
                    paramList = null;
                    tmBeanList = null;
                    --- ---
                }else{
                    --- ---
                }
            } catch (Exception e) {
                --- ---
            }
        }
        logger.info("------------ ,xxxx");
    }
}
( , ,Object Object):
Object object = null;
for(int i = 0;i <=count; i++){
object = new Object();
}

좋은 웹페이지 즐겨찾기