객체란? / 자바의 Memory와 Garbage Collection
안녕하세요.
이번에는 자바의 메모리 구조를 살펴보고 Garbage Collection에 대해 알아보겠습니다.
메모리 구조를 그림으로 파악하셔야 전체적인 흐름을 쉽게 이해하고 오래 기억할 수 있습니다.
<Memory 구조>
처음 접하시는 분들은 저게 다 뭐야? 이러실 수도 있지만, 지금은 Garbage Collection에 대해서 먼저 다룰 것이기에 화살표로 표시된 부분만 보시면 됩니다.
글을 보시고나면 이해가 쉽게 될거에요!
자바는 객체지향 프로그래밍입니다.
객체란 실 세계의 모든 구체적이고도 관념적 사물입니다.
구체적인 사물이라면 컴퓨터, 책상, 칠판 모두 가능합니다. 손으로 가르킬 수 있는 모든 것이요! 사람이 될 수도 있겠죠?
관념적 사물이란, 손으로 가르킬 수는 없지만 우리가 알고 있는 것들입니다.
형광등은 손으로 가르킬 수 있지만 형광등에서 나오는 빛은 손가락으로 가르킬 수 없죠?
형광등도 객체고, 형광등에서 나오는 빛도 객체입니다.
사랑도 손가락으로 가르킬 수 없지만 객체구요.
어떠한 단어를 말할 때 우리가 손으로 가르킬 수 없지만 공통된 것을 말하고 생각할 수 있다면 객체입니다.
결과적으로 보이는 것이든 보이지 않는 것이든 생각할 수 있는 모든 것을 객체라고 할 수
있습니다.
다만 프로그램에서는 모든 사물이 필요한 것이 아니기에 필요한 것만 추려야합니다.
객체에 대해서 지금은 이정도만 아시면 될 것 같고, 추후에 기회가 된다면 제대로 다루어보겠습니다.
이제 Garbage Collection에 대해서 설명드릴텐데요.
쉽게말해서 쓰레기 청소라고 생각하시면 됩니다.
자바에는 new라는 키워드가 있습니다.
객체가 new 키워드로 생성될 때 이 객체를 위한 메모리공간을 Eden 영역에 생성합니다.
아담과 에덴을 최초의 사람이라 하는데 그걸 연상하시면 이해하기 편할 것 같습니다!
메모리는 공간이 한정되어 있기 때문에 Eden영역이 꽉 차게 되면 Garbage Collection을 수행합니다.
쓰레기 청소는 엄밀히 말하면 쓰레기를 고르는게 아니라 쓰레기가 아닌 것들을 고릅니다.
그리고 쓰레기는 지워버리고, 지워지지 않은 살아남은 객체들을 서바이버 영역으로
옮깁니다.
(이 과정에서 논리적
주소는 안바껴서 그대로 유지됩니다. 주소는 현실 세계의 주소처럼 무언가를 가르키는 번지수라고 생각하시면됩니다,)
그리고 하나의 Survivor영역이 가득 차게되면, 그 Survivor영역에서도 마찬가지로 Garbage Collection(쓰레기 청소)를 수행합니다. 마찬가지로 쓰레기 청소를 한 Survivor영역에서 살아남은 객체들은 나머지 Survivor영역으로 이동합니다.
단, 쓰레기 청소가 일어난 Survivor영역은 비어있어야 합니다.
Survivor영역에서 쓰레기 청소를 반복하며 서로 왔다갔다해도 살아남게 되는 것은 Old영역으로 가게됩니다.
(처음부터 Eden영역에서 살아남은 객체가 Survivor영역보다 커서 못들어갈 경우 Old영역으로 가는 경우도 있습니다.)
사람으로 생각하면 eden은 신생아, survivor영역은 치열하게 살아남는 사람들, old영역은 치열하게 싸우다가 살아남고 늙게 된 사람들로 비유하시면 되겠습니다.
댓글 없음: