inflearn logo
강의

Course

Instructor

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

Object Memory Layout and HashCode

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

Resolved

97

brong

13 asked

0

안녕하세요!
JVM 파트를 복습하다가 궁금한 점이 생겨 질문드립니다.

 

Young Generation(Eden → S0 S1) → Old Generation → Permanent 영역으로 객체가 이동하는 과정에서 객체의 age가 세대 간 이동(Eden → S0 S1 포함)을 거치며 증가한다고 설명해주셨습니다.

 

그런데 제가 알고 있기로 age는 Young Generation 내의 Survivor 영역(S0 S1)을 이동할 때에만 증가하는 것으로 알고 있습니다.
age는 객체가 Minor GC를 거쳐 살아남은 횟수로 일반적으로 약 15회 생존하면 Old Generation으로 승격될 수 있는 조건이 되고, Old Generation으로 승격된 이후에는 더 이상 age가 증가하지 않는다고 알고 있습니다.

 

혹시 이 동작 방식이 JVM 구현체에 따라 달라질 수 있는 부분인지 아니면 제가 알고 있는 age는 다른 age인 것인지 궁금해서 질문드립니다:)

java 객체지향 jvm data-structure

Answer 2

1

nullnull8537

인프런 AI 답변을 참고하시면 되겠습니다. 그리고 age와 관련된 부분은 JVM 구현에 따라 달라질 가능성이 많다고 보는 것이 좋겠습니다. 현재는 일정 수준(보통 15)을 넘기면 age가 큰 의미가 없는 것으로 간주되고 있으나 새로운 기능이나 구조 변경이 발생할 경우 언제든 달라질 수 있습니다. 참고하시기 바랍니다. 😄

1

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 형씌님, “기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM” 강의에 대한 질문 주셔서 감사합니다.

GC에서의 age 개념은 Java Virtual Machine (JVM)이 객체의 “생존”을 추적하기 위해 사용하는 메커니즘입니다. 질문하신 내용과 관련된 주요 사항들을 간략히 정리하겠습니다:

  1. 객체의 Age 증가:

    • 객체의 age는 주로 Young Generation 내의 Survivor 영역(S0 ↔ S1)에서 Minor GC를 거칠 때마다 증가합니다. 이 과정은 객체가 Eden에서 Survivor 영역으로 처음 복사될 때부터 시작됩니다.
    • 객체가 두 Survivor 영역(S0, S1)을 이동할 때마다 age가 증가하며, 특정 age에 도달하면 Old Generation으로 이동할 수 있습니다.
  2. Old Generation과 Age:

    • 일반적으로 Young Generation에서 특정 횟수의 생존(기본적으로 15회)이 이루어지면, 객체는 Old Generation으로 승격됩니다.
    • Old Generation으로 이동한 객체는 age가 더 이상 증가하지 않습니다. 이는 Old Generation에서의 Garbage Collection이 다르게 동작하기 때문입니다.
  3. JVM 구현체 간의 차이:

    • 보통 언급된 규칙은 대부분의 주요 JVM 구현체(예: HotSpot)에서 공통적으로 적용됩니다. 하지만 특정 JVM에서는 해당 기능이 다르게 구현될 수 있습니다.

위의 설명과 같이, Young Generation에서의 age 증가는 JVM의 Minor GC 메커니즘에서 중요한 역할을 하며, 이를 통해 객체가 오래 남아 있으면 Old Generation으로 이동하여 관리되게 됩니다.

관련된 유사한 질문 및 더 많은 정보를 얻을 수 있는 링크는 다음과 같습니다:

저는 질문자님의 이해를 돕기 위해 지식공유자님의 기존 답변을 참고하였고, 유사한 정보 링크를 추천해 드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서도 답변해 주실 것입니다.

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

0

46

1

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

0

38

1

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

0

71

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

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