java 공부 10강 [객체와 메모리] - 평범한 회사원

프로그램|2018. 10. 17. 14:48
















안녕하세요


이번 10강에서는 객체와 메모리를 리뷰해 보겠습니다..


이렇게 쓰는게 저뿐만아니라 다른사람 한분 이라도 도움이 되신다면 좋겠습니다.


- 객체 생존기간

객체는 new 연산자에 의해 메모리를 할당하고 생성자에 의해 메모리에 있는 객체가 초기화 되는것 이라고 합니다. 반대로 소멸되는 경우에는 먼저 finalize 메소드를 이용하여 메모리를 초기화 되지 않은 상태로 돌리며 다음으로 이메모리 공간을 heap 에 반환 하는것입니다. 그러므로 객체의 존속기간에는 new 를 이용하여 메모리를 할당받는 순간부터 메모리를 heap에 반환 할 때 까지라고 보면 될것 같습니다.


- 객체와 영역

int나 struct와 같이 stack에 존재하는 valueType 변수들은 범위를 벗어나면 사라지마로 존재 기간이 짧습니다. 그러나 힙영역에 있는 객체(레퍼런스타입)들인 경우 영역을 벗어나더라도 메모르리를 해제 할때까지 사라지지 않는것이 특징입니다.


- GC(Garbage Collector)

프로그래머가 메모리 관리를 하지 않아도 되게 설계가 되어 있습니다. CLR에서 자동으로 알아서소멸 시켜 줍니다.  Garbage Collector는 메모리에 있는 참조가 끝난 객체를 쓰레기 치우는 것처럼 소멸 시키는 역할을 하는 것인데 메모리가 부족 하다고 판단이 들면 Garbage Collector는 참조되는 않는 객체의 메모리 영역을 청소하여 Heap에 반환 하는 것입니다. 또한 Garbage Collector는 객체를 오직 한번만 제거해 버리며 참조되고 있지 않은 것들만 제거를 합니다. 프로그래머가 일일이 코드를 통해 기술 했을때의 문제인 객체를 반복해서 소멸 한다든지, 참조되고 있는 객체를 소멸한다든지 하는것은 막아 주는 것입니다. 코딩 상에서 Garbage Collector에게 명시적으로 객체를 소멸 시켜달라고 할 수 있으나 그것은 객체를 소멸 시켜도 된다는 것을 알리는 역할을 할 뿐이지 즉시 작동 하는 것은 아닙니다.

물론 명령어도 있지만 그 명령어도 또한 Garbage Collector를 빨리 불러오는것이지 바로 실행시키지 못합니다.


* 소멸자의 사용

- Finalize 메소드

  객체가 Garbage Collector에 의해 소멸되는 시점에 호출되는 함수 이다. 이곳에 파일을 닫는 다든지, DB접속을 종료 한다든지 하는 일들을 명시 할 수 있습니다. Finalize 메소드를 구현 하면 C# 컴파일러가 컴파일시 finalization   Queue에 이 객체가 등록되고 Garbage Collector가 작동되면 객체를 소멸하기 전에 Finalize 메소드를 호출되는 것입니다.


이상입니다. : )

댓글()