Java GC관련 조사

-Xmx -XX:+PrintGCApplicationStoppedTime -XX:PretenureSizeThreshold=n -XX:MaxTenuringThreshold= -XX:PromotedPadding= -XX:+UseSerialGC 가장 심플한 컬렉터이며 싱글 프로세서 시스템에서 가장 효과적임. 오브젝트는 포인터 알고리즘을 사용한 포인터의 이동에 의해 tenured영역에 할당된다. 메이져 콜렉터는 tenured영역이 가득차면 시작된다. -XX:+UseParallelGC 멀티스레드로 Young세대의 마이너 컬렉션을 실행하여 싱글스레드로 Old세대의 메이져 컬렉터를 실행한다. -XX:+UseParallelOldGC (Java 7u4부터 디폴트적용) 마이너 컬렉션과 메이져 컬렉션에 멀티스레트를 이용한다. -XX:+UseConcMarkSweepGC -XX:+UseG1GC Java 6에서 도입된 새로운 컬렉터. 프래그멘테이션으로 CMS를 괴롭히는 FullGC이벤트를 최소화하기위하여 반복발행하는 stop-the-world의 정지를 짧게하여 tenured영역을 압축한다. 커다란 오브젝트의 할당과 컬렉션은 G1에서는 매우 코스트가 들어가며 지금까지 대부분 최적화가 적용되지 않고 있다. 정지시간의 타겟 -XX:MaxGCPauseMillis= 에 대해 동작하며 기본값은 200ms이다. 어플리케이션과 GC의 동작을 이해하기위해서는 적어도 아래의 설정을 적용하여 JVM을 기동할 필요가 있다. -verbose:gc -Xloggc: -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime Eden은 대부분의 오브젝트가 가장 처음에 할당되는 영역이다. survivor영역은 Eden영역의 컬렉션에서 살아남은 오브젝트의 일시보관장소이다. Eden과 survivor영역은 young 또는 new라고도 불리어진다. 계속 존속하는 오브젝트는 최종적으로 tenured(종신) 영역으로 이동된다. perm(영속)영역은 클래스나 static인 String등 실제로 영속(永続)하는게 당연한 오브젝트를 랜덤하게 갖는다. Java 7에서는 intern()으로 리턴되는 String은 permgen에서 tenured으로 이동되어진다. (Java 8부터는 사용되지 않음) 다른 상용 컬렉터(JRockit등)의 대부분은 각각 다른 perm영역을 사용하지 않고 tenured으로 이용될수도 있다. 마이너 컬렉션은 Eden영역이 가득차면 실행된다. new영역에 있는 모든 오브젝트가 필요에 따라 survivor영역이나 tenured영역에 복사된다. 참고사이트: http://www.infoq.com/jp/articles/Java_Garbage_Collection_Distilled]]>

Related Posts