JVM 학습 - 1분대 개념

1988 단어
 , 。  
 , 。  
 , 。  

1. 왜 세대구분 개념이 있어야 하는지, 세대구분 없이 안 되는지


세대 구분 없이 충분히 가능하지만 세대 구분의 유일한 이유는 GC 성능을 최적화하기 위해서다.어떻게 최적화합니까?세대를 나누지 않으면 매번 GC는 쓰레기 대상을 찾기 위해 전체 더미를 한 번씩 쓸어야 한다. 너무 느리다.세대별 대상을 특정한 세대별 구역으로 직접 만들면 GC는 이 세대별 구역을 대상으로 최적화할 수 있고 힘들지 않다.

2. 젊은 세대


젊은 세대는 세 부분으로 나뉜다.
  • 이든구, 즉 신입생 대상구, 큰 대상을 제외하고.
  • Survivor구역, 즉 생존대, 2개 1쌍: s0과 s1은 각각from과 to라고도 부른다.기본 비율은 8:1입니다.

  • 3. 대상이 겪는 과정:

  • 새 창설 대상, Eden 구역에 분배, 큰 대상을 제외하고 특수 처리.
  • Eden 구역에서 GC를 한 번 통과한 후 살아남으면 Survivor로 이동합니다.
  • 서바이보에서 GC를 한 번 더 겪으면 나이가 한 살 늘어난다.
  • 나이가 어느 정도에 이르러 노년기로 옮겼다.

  • 4. 젊은 세대가 사용하는 GC 알고리즘


    복제 알고리즘입니다.왜 복제 알고리즘을 선택합니까?젊은 세대의 80% 이상이 곧 죽기 때문이다.그래서 젊은 세대의 쓰레기 회수 알고리즘은 복제 알고리즘을 사용한다.즉, 메모리를 두 블록으로 나누어 한 번에 한 조각(Eden 및 From)을 사용하고, 한 조각을 다 사용하면 살아있는 대상을 다른 조각으로 복사하는 것이다.복제 알고리즘은 파편이 생기지 않는다.

    5. From 및 to 영역 복제 프로세스


    이전 섹션의 지침에 따라 복제 프로세스를 시연합니다.
  • GC가 시작되기 전에는 Eden 및 From 영역에만 객체가 존재합니다.From 영역에 객체가 있는 이유는 무엇입니까?
  • 프롬 구역에는 대상이 있어 이해하기 쉽고 GC가 발생하기 시작했고 Eden의 대상은 To 구역으로 복사되었다.

  • From의 객체에는 두 가지 결과만 있습니다.
  • 나이가 일정치(나이 한도값, -XX:MaxTenuringThreshold를 통해 설정할 수 있음)에 도달한 대상은 노년층으로 이동한다.
  • 도착하지 않은 복제본을 To 영역
  • 으로 이동
  • 이번 GC 이후 Eden과 From은 비워졌습니다.이때 To와 From은 서로 역할을 교환한다. 즉, To가 GC 이전의 From이 되어 유추하는 것이다.

  • From에도 객체가 있는 이유는 GC가 처음 발생했을 때 To 영역으로 복사된 후 역할을 교환하기 때문입니다.

    6. 젊은 세대 관련 JVM 매개 변수

  • -XX:NewSize -XX:MaxNewSize는 젊은 세대의 크기를 설정하는 데 사용되며, 전체 무더기의 1/3 또는 1/4로 설정하고, 두 값은 똑같이 설정하는 것을 권장한다.
  • -XX:SurvivorRatio는 Eden과 그 중의 서바이보의 비율을 설정하는데 이 값도 비교적 중요하다.
  • -XX:+PrintTenuringDistribution 이 매개 변수는 Minor GC가 있을 때마다 Survivor 구역의 각 연령대의 대상의 크기를 표시하는 데 사용됩니다.
  • -XX:InitialTenuringThreshol-XX:MaxTenuringThreshold는 노년으로 진급한 대상의 연령의 최소치와 최대치를 설정하는데 사용되며, 대상마다 Minor GC를 한 번 견지한 후에 연령이 1을 더한다.
  • 좋은 웹페이지 즐겨찾기