인프런 커뮤니티 질문&답변
안녕하세요~ 회수라는 의미에 대해서 질문합니다.
해결된 질문
작성
·
28
0
안녕하세요~~ 강의 너무 잘 듣고 있습니다.
강의 듣다가 한가지 의문이 생겨서 질문 남깁니다.
GC가 회수한다 라고 말씀을 해주셨는데 여기서 회수는 정확히 어떤 의미일까여? reachable 가능성을 따져서 도달 가능한 인스턴스를 제외한 나머지 공간을 OS에 반납(실제 OS에 반납은 아닐거 같지만 JVM에 반납한다? 라는 의미로 얘기합니다..)한다는 의미일까여 아님 그냥 JVM이 사용가능한 공간으로 만들어 주는것 (free와 같은 개념)으로 만들어 주는걸 의미하는 걸까여?
간략하게 여기서 회수란 메모리 재사용 가능 상태(실제 값이 0으로 초기화 되거나 그런게 아니라 연결을 끊음으로써 언제든 그 공간을 새롭게 할당 가능한 상태)로 돌림으로 이해하면 될까여 아님 실제로 반납을 해주는걸까여....? 진짜 어렵네여 ㅠㅠ 일하면서도 단한번 제대로 잡고간적 없는듯 해서 맨날 헷갈리는 개념입니다 ㅠㅠ
답변 1
1
C언어의 free() 함수와 같은 의미로 이해하시면 될 것 같습니다. 결과적으로 JVM이 사용가능한 메모리 영역(재할당)으로 처리하는 것이지요. 식당에서 손님이 앉아 있던 테이블이 다시 회수되는 경우를 생각하시면 될 것 같습니다. 다만 실제 값을 0으로 초기화 하는 일은 보통 하지 않습니다. 메모리는 식당 테이블이 아니기 때문입니다. 값을 저장하면 기존에 저장되어 있던 값은 자동으로 지워지고 덮어 써집니다.
너무 어렵게 생각하지 마시고 개념적으로 이해하시기 바랍니다. 실제로 0으로 덮어 쓰도록 할 것인지 아니면 그냥 둘 것인지는 개념을 구현하는 과정에서 결정합니다. 어떤 환경에서는 무조건 0으로 덮어 써서 회수한 메모리에 저장된 값까지 클리어 해야 할 수 있습니다. 그러나 어차피 덮어 써지면 기존 값이 사라지는 상황에서 굳이 해야 할 필요 없는 일을 함으로써 CPU를 더 사용하는 것은 효율적이지 않은 것이지요.
더 깊이 들어가 이야기를 하자면 일반적인 범용 운영체제에서 메모리 관리 주체는 운영체제의 메모리 관리자 입니다. 그리고 가상 메모리 시스템으로 관리되며 모든 프로세스는 저마다 독립적인 가상 메모리 공간을 갖습니다. JVM도 마찬가지로 자신만의 고유한 가상 메모리 영역을 갖습니다. JVM에서 GC가 수행될 때 회수되는 메모리라는 것도 결국은 가상 메모리 상의 논리적 공간속 어딘가에 불과하지요.
결국 '반납'이라는 것은 생각보다 모호한 개념적 표현입니다. 그러니 여러 각도에서 메모리 관리를 바라볼 수 있도록 다양한 공부를 하시라 권하고 싶습니다. 지금 그러한 답답함이 결국 이해에 이르게 하는 동력이 되어 줄 것입니다. 😄






매번 좋은 말씀 감사합니다~~~