5. 메모리 구조
• new/young
객체가 생성되지 마자 저장되는곳. 시간에 지남에 따라 old영역으로 이동
• old
new/young영역에서 저장되었던 객체 중, 오래된 객체가 이동되어 저장
• perm
class, method등의 코드가 저장되는 영역
6. GC알고리즘즘
• Minor GC
• Copy & Scavenge : eden, survivor영역
• Full GC
• Mark & Compact : old영역
7. 다양한 GC알고리즘
• Default Collector
• Parallel GC for young generation
• Concurrent GC for old generation
• Incremental GC
8. Parallel GC
• JDK1.4부터는 Minor GC를 동시에 여러개의 스레드를 이요
해 사용가능
• 4 cpu, 256M이상에서 성능 발휘?
• Low-pause(stop-the-world 최소화)
Throughput(ASAP) 두 가지 방식을 사용
9. Concurrent GC
• Full GC의 단점(stop-the-world)를 보완하기 위해
• Initial Mark : 활성화 객체 미리 찾기
• Concurrent Mark : 참조가 끊긴 객체 확인
• Concurrent Sweep : 정리 정리
10. Incremental GC
• Full GC에 의해서 발생하는 stop-the-world pause를 줄이자
• Minor GC가 일어날 때마다, old영역을 조금씩 GC해서자
결과적으로 Full GC를 최소한으로 일어나게 만들자
11. GC로그 수집과 분석 방법
• java -verbosegc
• java -XX:+PrintGCDetails
12. GC관련 파라미터
• 전체 힙 크기 조정
-Xms1024M -Xmx1024M
• perm크기 조정
-XX:MaxPermSize
• new영역과 old영역의 크기 조정
-XX:NewSize
• survivor영역 비율 조정
-XX:SurvivorRatio http://www.oracle.com/technetwork/java/javase/
community/vmoptions-jsp-140102.html
• ref : http://www.oracle.com/technetwork/java/javase/community/
vmoptions-jsp-140102.html
13. GC관련 파라미터
• -server
• 어플리케이션 서버에 적합한 compiler최적화, 메모리구조
• new 영역 > old영역
• -client
• 클라이언트 어플리케이션에 적합한 compiler최적화, 메모리
구조
• new영역 < old영역
14. JVM GC튜닝
1. 어플리케이션의 종류와 튜닝 목표 값 설정
2. 힙 크기와 perm크기 설정
3. 테스트와 로그분석
4. perm크기 조정
5. GC 수행시간 분석
6. 파라미터 변경