본문 바로가기

책을 읽겠습니다!/자바 성능 튜닝 이야기7

[자바 성능 튜닝 이야기] 반드시 튜닝해야 하는 대상은? 모든 화면 다 분석할 수 있으면 좋다. 그러긴 쉬지 않으니 APM 같은 툴 활용도 좋다. 모든 화면 다 분석하는 건 비용적으로 크다. 상위 20퍼센트의 부유층이 전체 부의 80퍼센트를 소유하듯 사용량의 20퍼센트를 차지하는 화면을 튜닝하자. 웹로그를 분석하는게 좋을 수 있다. 이런 경우 있엇다. 기존 서버 구성은 두 대의 WAS서버, 각 서버에는 인스턴스 3개가 서로 클러스터링. 화면 하나에 한 시간 당 10만 번 이상의 호출이 있었다. 그래서 서버에 문제가 발생하였다. 문제를 진단했다. 호출되는 화면의 응답속도는 0.2 ~ 0.3 초로 양호하다. 검색 시 DB 쿼리 수행 시간 대 애플리케이션 수행 시간의 비율은 8:2로, DB에서 많은 응답 시간이 소요되었다. 검색 조건 화면을 로딩할 때 DB에서 3회.. 2023. 9. 17.
[자바 성능 튜닝 이야기] GC는 언제 발생할까 / GC가 어떻게 수행되고 있는지 보고 싶다? HotSpot gc로 검색하면 좋은 정보가 많다. JDK 6 기준의 이야기다. 반드시 최신 정보도 공부해야한다. GC의 역할은 더 이상 필요 없는 객체를 처리한다. Runtime data area 자바에서 사용하는 메모리 영역 PC 레지스터 JVM 스택 힙 메서드 영역 런타임 상수 풀 네이티브 메서드 스택 이 영역 중 GC의 대상이 되는 건 힙 영역 GC에 대해 공부하는 부분이니 GC에 의해 관리되는 Heap이냐 Non-Heap이냐로 보자. Heap 메모리 클래스 인스턴스, 배열이 이 메모리에 쌓인다. 이 메모리는 '공유(shared) 메모리'라고도 불리우며 여러 스레드에서 공유하는 데이터들이 저장되는 메모리다. Non-Heap 메모리 이 메모리는 자바의 내부 처리를 위해서 필요한 영역이다.. 2023. 9. 17.
[자바 성능 튜닝 이야기] JVM은 도대체 어떻게 구동될까? HotSpot VM은 어떻게 구성되어 있을까? Java HotSpot Performance Engin. 자바를 만든 Sun에서 성능 개선을 위해 JIT 컴파일러를 만든 것. HotSpot은 자바 1.3부터 기본 VM으로 사용되어왔ㄷ사. HotSpot VM은 세 가지 주요 컴포넌트로 되어 있다. VM(Virtual Maching) 런타임 JIT 컴파일러 메모리 관리자 JIT Just In Time. 언제나 자바 메서드가 호출되면 바이트 코드를 컴파일 하고 실행 가능한 네이티브 코드로 변환한다..하지마 매번 JIT로 컴파일을 하면 성능저하가 심해, 최적화 돤계를 거치게 된다. HotSpot VM 아키텍쳐를 보면 HotSpot VM 런타임에 GC 방식과 JIT 컴파일러를 끼워 사용한다. 그 사이에 API를 제.. 2023. 9. 15.
[자바 성능 튜닝 이야기] 구글에서 이야기하는 안드로이드 성능 개선 같은 자바를 대상으로 하는 내용이라 참고했습니다. 기본적으로 안드로이드에 해당되는 내용입니다. 필요없는 객체 생성은 피하자 1) String 대신 StringBuffer 2) Integer 배열 대신 int 배열 3) 다차원 배열 대신 1차원 배열 객체 덜 생성되고, GC도 적게 발생 static을 적절히 사용하자 인스턴스 변수에 접근할 일이 없을 경우 static 메서드를 선언하여 호출하는 것은 많게 20퍼센트의 성능 개선이 발생할 수 있다. 상수에는 static final 을 사용하자 변하지 않는 상수를 선언할 때 이를 선언할 경우 static으로 선언할 때 저장되고 참조되는 위치가 달라진다. static final의 속도가 훨 빠르다. 상수화되면 constant folding 발생해 컴파일 타임에 .. 2023. 9. 15.
XML과 JSON도 잘 쓰자! & 서버를 어떻게 세팅해야 할까?! 설정파일이나 DB 쿼리, 주고 받는 데이터들을 XML과 JSON으로 사용하는 경우가 많은데 잘 알고써야한다. XML은 eXtensible Markup Language의 약자로 장점은 누구나 데이터의 구조를 정의하고 그 구조를 공유함으로 일관된 데이터 전송, 처리를 할 수 있다 그리고 이러한 특성 때문에 파싱을 해야한다. 구조에 맞게 처리를 한다는 것. 자바에서는 XML 파싱 위해 JAXP 제공 SAX는 순차적 방식으로 처리, DOM은 모든 XML 읽어 트리 만든 후 처리(메모리 부담이 커) 서버단에서 사용하기 적합한 건 SAX와 DOM. SAX 파서 순차적으로 처리하는 이벤트 기반 모델. DOM보다 손이 많이 간다 DOM 파서 트리 형태의 데이터로 만든 후 가공한다. 결과는 SAX 파서 써라.. XML .. 2023. 9. 12.
DB를 사용하면서 발생 가능한 문제점들 JDBC 관련 API는 클래스가 아닌 인터페이스. JDK의 API에 있는 java.sql 인터페이스를 각 DB 벤더에서 상황에 맞게 구현했다. (벤더에 따라 처리능력 다를 수 있다) 기본적으로 DB와 연결이 될 땐 Connection 객체를 만들고 쿼리를 수행하여 데이터를 받은 뒤 다 사용한 후 Connection 객체를 닫는다. 세션 공부할 때와 비슷. 이 중에서 가장 시간을 많이 소모하는 부분은 Connetion 객체를 얻는 부분이다. DB와 WAS 사이에 통신이 필요하기 때문 이 때 Connection 객체를 생성할 때 대기시간을 줄이고 네트워크의 부담을 줄이기 위해 사용하는 것이 DB Connection pool이다. DataSource JDK 1.4부터생긴 표준: Connection Pool로 .. 2023. 9. 12.
자바 성능 튜닝 이야기 디자인 패턴 꼭 쓰자 대표적으로 MVC 패턴이나 J2EE에서 사용된 패턴이 나온다. 뷰는 결과를 보거나 입력하는 화면 (frontend layer) 모델은 입력되어 치리된 내용을 저장, 관리, 수정한다. (DB) 컨트롤러는 이 둘을 이어주는 역할. MVC 패턴이 좋은 디자인 패턴인 예로는 JSP 모델1을 예로 뷰와 비즈니스 모델의 분업화가 힘들어 사람에 따라 코드의 변경이 많이 일어날 수 있다. 모델 1은 JSP로 요청을 직접하지만 2는 서블릿으로 요청을 한다. 성능적 차이는 없더라도 협업과 코드유지보수의 관점에서 이점이 있다. 디자인 패턴은 의미 있는 클래스들을 묶은 각각의 집합을 이른다.. 이러한 집합들을 구조적으로 배치한 것. J2EE 패턴에 괴상한 패턴들이 되게 많다 .. 이걸 다 공부하라는 건 .. 2023. 9. 4.