Java/Java Tuning

    reflection

    reflection 패키지 reflection 패키지에 있는 클래스들을 사용하면 JVM에 로딩되어 있는 클래스와 메서드 정보를 읽어올 수 있다. 참고로 클래스의 메타 데이터 정보는 JVM의 Perm 영역에 저장되는데, 만약 엄청나게 많은 Class 클래스를 동적으로 생성하면 Perm 영역이 더이상 사용할 수 없게 되어 OutOfMemoryError가 발생할 수도 있다. Class 클래스 Class 클래스는 클래스에 대한 정보를 얻을 때 사용하며, 생성자는 따로 없다. Object 클래스에 있는 getClass() 메서드를 이용하면 Class 클래스를 생성할 수 있다. 주요 메서드 Stirng getName() 클래스의 이름을 리턴한다. Package getPackage() 클래스의 패키지 정보를 패키지 ..

    Garbage Collector (GC)

    자바 프로그래밍에서 하나의 객체는 메모리를 점유하고, 필요하지 않으면 메모리에서 해제되어야 한다. GC란 더 이상 필요가 없는 쓰레기 객체를 정리하는 작업을 말한다. 자바에서는 메모리를 GC로 관리하기 때문에, 개발자가 메모리를 처리하기 위한 로직을 만들 필요가 없다. GC 작업을 하는 가비지 콜렉터는 메모리 할당, 사용 중인 메모리 인식, 사용하지 않는 메모리 인식과 같은 일들을 수행한다. 사용하지 않는 메모리를 인식하는 작업을 수행하지 않으면, 할당한 메모리 영역이 꽉 차서 JVM에 행이 걸리거나, 더 많은 메모리를 할당하려는 현상이 발생한다. 행이란, 서버가 요청을 처리 못하고 있는 상태를 의미한다. 만약 JVM의 최대 메모리 크기를 지정해서 전부 사용한 다음, GC를 해도 더 이상 사용 가능한 메..

    JVM (Java Virtual Machine)

    HotSpot VM 자바 성능 개선을 위해 Sun에서 만든 Just In Time(JIT) 컴파일러의 이름이 HotSpot VM JIT 컴파일러는 프로그램의 성능에 영향을 주는 지점에 대해서 지속적으로 분석하며, 분석된 지점은 부하를 최소화하고, 높은 성능을 내기 위한 최적화 대상이 된다. 자바 1.3 버전부터 기본 VM으로 사용되어 왔으며, 운영되고 있는 대부분의 시스템들은 모두 HotSpot 기반의 VM HotSpot VM은 아래의 세 가지 주요 컴포넌트로 구성된다. VM 런타임 JIT 컴파일러 메모리 관리자 VM 런타임 HotSpot VM 런타임에 GC 방식과 JIT 컴파일러를 끼워 사용할 수 있다. 이를 위해서 VM 런타임은 JIT 컴파일러용 API와 가비지 컬렉터용 API를 제공한다. JVM을 ..

    서버 세팅

    웹 기반의 시스템에서 성능에 영향을 줄만한 세팅은 크게 웹 서버, WAS 서버, DB 서버, 장비 세팅으로, 시스템에 가장 적절한 설정값은 반드시 성능 테스트를 통해서 찾아내야 한다. 아파치 웹 서버 설정 웹 서버를 WAS 서버 앞에 두지 않으면 정적인 리소스를 처리하느라 WAS 서버의 스레드를 점유하게 된다. 따라서, 반드시 상용 웹 서버나 아파치 웹 서버를 WAS 앞 단에 두고 운영해야 한다. httpd.conf 아파치 웹 서버는 여러 개의 프로세싱 모듈 기반의 서비스를 제공한다. (MPM) 아파치 웹 서버의 설정을 바구는 방법은, 설치 폴더 하단의 conf 디렉터리에 있는 httpd.conf 파일을 수정하는 것 ThreadsPerChild 250 MaxRequestsPerChild 0 Threads..