달력

102018  이전 다음

  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
예전부터 조사해봐야지 생각만하다가 했음

나름대로 정리한것

우선 Java의 메모리 구조는 Eden, Survivor 1/2, Old, Perm으로 되어있다.

Eden은 객체가 생성되면 저장되는곳이고,

Survivor 1/2 MinorGC가 일어날때마다 Eden에서 이동되는 공간이다.

Old Survivor영역에서 오래된 객체가 저장되는 곳이다.

마지막으로 Perm Code가 저장되는 곳으로서 실행이후 일정한 수치를 유지하므로 신경안써도된다.

 

우선 맨 처음 Application이 실행되면, 객체가 Eden에 저장이 된다. 그러다가 GC가 발생하면 Eden에 있던 객체중 Alive된 객체는 Survivor1로 이동을 하고, Eden에 있는 나머지는 clear된다.

중간에 객체가 생성이되고 Eden에 저장이되다가 GC가 실행이되면 Eden Survivor1 Alive된 객체가 Survivor2로 이동되고 Eden, Survivor1 clear된다.

다시 한번 GC가 실행되면 Eden, Survivor2에 있는 Alive된객체는 Survivor1에 이동되고 나머지는 Clear된다. 계속 반복을한다

위에서 수행되는 GC MinorGC라고한다. (속도 빠름, 자주일어남)

 

MinorGC가 수행하는 가운데 Survivor에 있는 객체중 오래된 객체는 Old영역으로 이동된다.

 

Old영역의 GCMark & Compact 알고리즘을 사용한다. Old에 있는 모든 객체를 따라가면서 reference가 연결되지않은 객체를 Mark한뒤, Mark가 끝나면 Mark된객체는 삭제한다.

이것을 Full GC라고 한다. (속도느림, 순간적으로 application멈춤)




https://www.ibm.com/developerworks/java/library/j-jtp11253/

확실한 건데 해석하려면 반나절이니. . . 일단 프린트 고고싱 

의문점 : 그럼 오래된객체인지는 어떻게 하는지, Alive의여부는 어떻게 정해지는 것인지

JVM GC와 메모리 Tuning.pdf


이 글은 저의 이해 및 정리한 것이므로 사실과 다를 수 있습니다.
틀린점은 지적해주시면 감사하겠습니다.
Posted by 오산돌구
TAG