자신의 구덩이 작성 --JVM보고 메모리 오버 플로우를 파

일반 작업, 일괄 작업 테이블 데이터, 테스트 데이터를 쓰기에서, paramList 및 tmBeanList이 정보를 통해 찾아 복구되지 만든 개체는 결국이 발견 Paozhaopaozhe 메모리 오버 플로우가 발생 테스트 중에 발견 된 약 10 만, 그리고, 발견 된 오브젝트 레퍼런스 카운트의 일부, 메모리의 그 비용이 있으며, 메모리를 원형 기준으로 객체를 생성하거나, 다른 사람이 계속해서주기를 카운트하지 않는, 각각의 사이클 (NULL로 설정) 오브젝트 레퍼런스의 파괴를 완료했다; 또는 루프의 본문에 참조 된 객체를 만드는 직접 체외 순환 용 오브젝트를 선언되도록 메모리에 하나의 오브젝트 레퍼런스, 각각의 새로운 객체 오브젝트 참조 다른 점이지만 메모리 하나만.

/ ** 
 * 일반 작업 XXXX 
 * @author XXX 
 * XXX @date 
 * @version XXX
  * / 
@Component (값 = "xxxJob" )
 공개  수업 xxxJob { 

    @Transactional 
    공공  무효 doService (지도 <문자열, 개체> scheduleJob) { 
        logger.info ( "----------------------- 작업, XXXXX ---------- 타이밍 시작" )
         // 비즈니스 로직 
        --- --- 생략 서비스 코드를 위해 ( 지도 <문자열, 개체> 지도 : 목록) {
             은 try {
                 --- --- 생략 서비스 코드
        
                목록 <지도 <문자열, 객체 >> tmBeanList = tMemberRfmDao.queryBeanForMap (TMR); 
                목록 <지도 <문자열, 객체 >> paramList = 새로운 ArrayList를 <> ();
                만약 (! {CollectionUtils.isEmpty (tmBeanList))
                     ---省略业务代码---
                     에 대한 (지도 <문자열, 개체> 회원 : tmBeanList) { 
                        문자열 MEMBERID = (문자열) member.get ( "MEMBER_ID" ); 
                        지도 <문자열, 개체> TML = 새로운 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); 
                        경우 (paramList.size () == INT_TWO_THOUSAND) { 
                            tMemberLabelDao.saveBatch (paramList); 
                            paramList.clear (); 
                        } 
                    } 
                    경우 (paramList.size ()! = 0 ) {
                        tMemberLabelDao.saveBatch (paramList) 
                    } paramList
                     = NULL ; 
                    tmBeanList = NULL;
                     --- --- 로그 
                } 다른 {
                     --- --- 로그 
                } 
            } 캐치 (예외 E) {
                 - - 예외 
            } 
        } 
        logger.info ( "----------------------- 종료시기 작업은 XXXX는" ); 
    } 
} 
주 (루프 외부에서 선언 된 객체는 객체 참조를 만드는 루프 본문은 개체 다른 개체에 대한 참조를 객체) :
개체 = null이 객체;
에 대한 (INT I = 0; 나는 <= COUNT, 나는 ++) {
객체 = 새 새 개체 ();
}

 

추천

출처www.cnblogs.com/huangrenhui/p/11365141.html