inflearn logo
강의

Course

Instructor

Solid Foundation! Java Starting Strongly - Part 2: OOP and JVM

JVM Heap Area and GC

안녕하세요~ 회수라는 의미에 대해서 질문합니다.

Resolved

71

bp61156231

2 asked

0

안녕하세요~~ 강의 너무 잘 듣고 있습니다.

강의 듣다가 한가지 의문이 생겨서 질문 남깁니다.

GC가 회수한다 라고 말씀을 해주셨는데 여기서 회수는 정확히 어떤 의미일까여? reachable 가능성을 따져서 도달 가능한 인스턴스를 제외한 나머지 공간을 OS에 반납(실제 OS에 반납은 아닐거 같지만 JVM에 반납한다? 라는 의미로 얘기합니다..)한다는 의미일까여 아님 그냥 JVM이 사용가능한 공간으로 만들어 주는것 (free와 같은 개념)으로 만들어 주는걸 의미하는 걸까여?
간략하게 여기서 회수란 메모리 재사용 가능 상태(실제 값이 0으로 초기화 되거나 그런게 아니라 연결을 끊음으로써 언제든 그 공간을 새롭게 할당 가능한 상태)로 돌림으로 이해하면 될까여 아님 실제로 반납을 해주는걸까여....? 진짜 어렵네여 ㅠㅠ 일하면서도 단한번 제대로 잡고간적 없는듯 해서 맨날 헷갈리는 개념입니다 ㅠㅠ

java 객체지향 jvm data-structure

Answer 1

1

nullnull8537

C언어의 free() 함수와 같은 의미로 이해하시면 될 것 같습니다. 결과적으로 JVM이 사용가능한 메모리 영역(재할당)으로 처리하는 것이지요. 식당에서 손님이 앉아 있던 테이블이 다시 회수되는 경우를 생각하시면 될 것 같습니다. 다만 실제 값을 0으로 초기화 하는 일은 보통 하지 않습니다. 메모리는 식당 테이블이 아니기 때문입니다. 값을 저장하면 기존에 저장되어 있던 값은 자동으로 지워지고 덮어 써집니다.

너무 어렵게 생각하지 마시고 개념적으로 이해하시기 바랍니다. 실제로 0으로 덮어 쓰도록 할 것인지 아니면 그냥 둘 것인지는 개념을 구현하는 과정에서 결정합니다. 어떤 환경에서는 무조건 0으로 덮어 써서 회수한 메모리에 저장된 값까지 클리어 해야 할 수 있습니다. 그러나 어차피 덮어 써지면 기존 값이 사라지는 상황에서 굳이 해야 할 필요 없는 일을 함으로써 CPU를 더 사용하는 것은 효율적이지 않은 것이지요.

더 깊이 들어가 이야기를 하자면 일반적인 범용 운영체제에서 메모리 관리 주체는 운영체제의 메모리 관리자 입니다. 그리고 가상 메모리 시스템으로 관리되며 모든 프로세스는 저마다 독립적인 가상 메모리 공간을 갖습니다. JVM도 마찬가지로 자신만의 고유한 가상 메모리 영역을 갖습니다. JVM에서 GC가 수행될 때 회수되는 메모리라는 것도 결국은 가상 메모리 상의 논리적 공간속 어딘가에 불과하지요.

결국 '반납'이라는 것은 생각보다 모호한 개념적 표현입니다. 그러니 여러 각도에서 메모리 관리를 바라볼 수 있도록 다양한 공부를 하시라 권하고 싶습니다. 지금 그러한 답답함이 결국 이해에 이르게 하는 동력이 되어 줄 것입니다. 😄

1

bp61156231

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

compareTo를 사용하는 이유가 뭔가요?

0

46

1

[실습] MyString에 복사 생성자 추가

0

38

1

equals의 재정의(overriding)에 대해서

0

80

2

TestEx 객체 생성 시 생성자 호출 질문

0

62

2

[MyString 실습 인스턴스 중복 생성 문의] MyString.setString(String param)

0

100

2

주소록 실습 3단계에서 막혔어서 조언을 구하려고 질문 드립니다.

0

85

2

해시 알고리즘 관련으로 질문이 있습니다.

0

73

2

21분 경 Old generation의 GC 설명 질문입니다.

0

102

3

임시 객체의 첫 번째 상황에 대한 질문

0

70

2

String 객체가 하나 더 생성되는 이유가 궁금합니다

0

190

3

하위 클래스와 상위 클래스의 생성자 순서

0

105

2

GC의 age와 관련하여 질문 있습니다.

0

97

2

Object Header 의 Klass word (39강 36:00)

0

115

2

method area는 이름이 class area가 아니고 왜 method aread인지 궁금합니다.

0

139

2

교안 p.305 'throw 필수' 질문

0

81

1

Metaspace에 대한 질문

0

258

2

clone() 메서드를 재정의함으로써 Deep copy로 구현한다로 이해하면 될까요?

0

120

2

MyListEx 질문드립니다.

1

136

1

part3 강의 개강

0

197

2

문자열 비교 강좌에서 문자열 선언 방법 간에 hashCode() 값 관련한 질문입니다.

0

222

2

상속과 오지랖의 콜라보 예제에서 clone() 메서드에 대한 문의드립니다.

1

182

2

보이지 않는 임시 객체의 자막 수정 요청

0

116

2

스레드 관련해서 질문이 있습니다.

0

203

1

metaspace 관련 문의드립니다.

0

199

2