GC튜닝이 필요한 경우 JVM옵션 중 Xms 옵션과 Xmx 옵션으로 메모리 크기를 지정하지 않았다. -Server 옵션이 포함되어있지 않다. 시스템에 Timeout 로그와 같은 로그가 남는다. 심플한 튜닝 1.String 객체 대신 StringBuilder 혹은 StringBuffer를 사용한다. 2.Log를 적게 쌓는다. 방법 첫번째 : Old영역으로 넘어가는 객체의 수 최소화 하기 New영역을 크기를 조정해서 혹은 Old영역과의 New 영역과의 비율을 조정해서 Old영역으로 넘어가는 객체 수를 줄여 Full GC가 일어나는 횟수를 줄여준다. 방법 두번째 : Full GC 시간을 줄이자 Full GC실행 시간은 Minor GC에 비해 길기 때문에 Old 영역의 크기를 잘 조정해서 Full GC 용량을 ..

GC모니터링 JVM이 어떻게 GC를 수행하는지를 알아내는 과정을 말하는데, Young영역에서 Old영역으로 얼마나 이동했는지, Stop-The-World가 언제 일어나고 얼마동안 일어났는지 정보를 알 수 있다. 또한, 때에 따라서 GC튜닝이 필요한지 안한지 확인하기 위해서다. 모니터링방법 1.jstat HotSpot JVM에 있는 모니터링 도구이다. 그외 HotSpot JVM 모니터링 도구로는 jps나 jstatd가 있다. jstat은 GC수행정보 뿐 아니라 클래스로더 수행정보나 Just In Time 컴파일러 수행정보도 알 수 있다. jstat은 $JAVA_HOME/bin 디렉토리에 있다. 환경변수로 설정한 $JAVA_HOME 을 불러오는 방법 (운영체제, 프롬프트에 따라 명령어가 다르다 -_-) wi..

Garbage Collection 이란 자바에서는 새로 생성 되는 객체에 대한 메모리들이 Heap영역에 저장된다. 초기 C언어 같은 경우는 이런 참조 변수들에 대한 메모리 관리가 중요했다. 더이상 쓰지 않는 변수들에 대한 메모리 할당을 없애주어야 하는 것이다. 이를 해주지 않는다면, 프로그램에 규정된 메모리가 full되어 누수가 되거나 멈추게 되는 것이다. 그러나 자바에서는 GC라는 장치가 있어, 우리가 더이상 참조하지 않는 객체에 대해서 제거를 해주게 된다. 위 사진과 같이 unreachable (힙 영역 내에서 자신들끼리 참조하는 객체들)이 GC 대상이 된다. 이 때, GC에서 공통적으로 수행되는 단계를 1. Stop-The-World 2. Mark And Sweep 이라고 한다. Stop-The-W..

더보기 Class Loader Class파일들을 읽어서 Runtime Data Area에있는 각 영역에 맞는 정보들을 적재하는 역할을 한다. Execution Engine Method Area의 바이트 코드를 제공받아, class에 정의된 내용대로 바이트 코드를 실행 한다. 실행방식에는 Interpreter, JIT(Just In Time)가 있다. Interpreter - 바이트 코드를 한줄 씩 해석하여 실행하는 방식이라 속도가 느리다. JIT (Just In Time) - 바이트 코드를 컴퓨터 프로세서(CPU) 직접 보낼 수 있는 명령어로 바꾸는 프로그램이다. (컴파일) ※JIT 는 이미 한번 읽어서 기계어로 변경한 소스코드는 또, 컴파일하지 않으며 저장소에 기계어로 저장한다. 따라서 인터프리터를 보..

자바는 JVM (Java Virtual Machine)을 이용하여 각기 다른 운영체제에서 실행가능하게 한다. JRE Java Runtime Environment로 자바 애플리케이션을 생성하고 실행하기 위한 구성요소이다. JRE의 라이브러리를 통해 JVM 실행을 하는데 도움을 준다. JRE는 Java클래스 라이브러리, Java 클래스 로더 - 자바 클래스들은 한번에 로드 되지 않고, 필요 할 때 로드된다. 런타임에 클래스를 동적으로 JVM에 로드해 주는 일을 한다. 로 구성되어있다. JDK Java Development Kit 으로 말그대로 자바 어플리케이션을 구축하기 위한 개발 킷이다. 물론 JDK에는 JRE 를 포함하고 있기도하다. JDK에는 javac - java 파일을 class파일(바이트 코드가 ..