안녕하세요 푸민입니다.
자바는 참조하고 있는 변수가 없으면 해당 값을 쓰래기로 인식을 합니다.
그렇게 되면 자바에 있는 가비지 컬렉터가 쓰래기로 인식된 메모리를 알아서 반환해줍니다!
예를 들어볼까요?
Acticity mActivity = getApplicationActivity();
위와 같이 액티비티를 받아와서 사용을 하다가 사용을 다하면
mActivity = null;
이런식으로 참조하는 값에 null을 줍니다.
이렇게 되면 mActivity 가 참조하고 있던 값이 없어지기 때문에
가비지컬렉터는 mActivity를 쓰래기로 인식하게 됩니다.
그러면 가비지컬렉터가 메모리를 알아서 반환해줍니다!
굉장히 편리하죠 메모리를 알아서 반환이라니..
하지만 그에 따라 안좋은 현상이 있는데,
개발자로서 메모리 관리에 약해 질수 있는것 같아요.
굉장히 중요한 부분이기에 초기에 메모리 관리에
신경을 많이 쓰면서 개발을 하시는게 좋습니다!
그런데 배열 메모리 관련하여 이슈가 있었는데요.
Weather [] weatherList = {new Weather(),new Weather(),new Weather(),new Weather()};
이런식으로 배열이 선언되었을때 메모리 반환은 for문을 이용해서 할 수 있는데요
for(Weather weather : weatherList){
weather = null;
}
이렇게 하면 메모리가 반환될까요??
정답은 반환이 안된다입니다.
그 이유는 향상된 포문을 사용하면 배열에 있는 해당 객체가 참조하는 값을 복사하여
새로운 객체가 같은 값을 참조하는 것이 됩니다.
즉 배열의 원본 참조객체는 그대로 있되 새로운 객체가 생기는 것이지요.
그래서 배열 메모리 반환은
for( int i = 0 ; i < weatherList.length ; i++ ){
weatherList[i] = null;
}
이렇게 직접 배열에 접근하여 Null 처리해주시면 메모리 반환에 큰 도움이 될거에요~
물론! 배열보다 ArrayList 객체를 사용하시면 clear() 메소드를 이용하여 간편하게 메모리를 반환할 수 있습니다~
문의사항은 sj60414@ 네이트닷컴이나 댓글로 해주세요!
'Development > Android' 카테고리의 다른 글
[안드로이드] 터치이벤트, 핀치 인 아웃 드래그 제어 (0) | 2015.08.24 |
---|---|
[안드로이드] Api level 19 Package Index 요약 (0) | 2015.08.13 |
[안드로이드] Sprite Animation 적용해보기! (0) | 2015.08.11 |
[안드로이드] Location 정보 가져오기 (0) | 2015.08.09 |
[안드로이드] 커스텀 View 만들기 (0) | 2015.08.08 |
댓글