[책 후기] 자바 성능 튜닝 이야기
개발자가 반드시 알아야 할 자바 성능 튜닝 이야기
이상민 / 인사이트
http://www.kyobobook.co.kr/product/detailViewKor.laf?barcode=9788966260928
서점을 돌아다니면서 눈길 가는 책 집었는데 집 근처 도서관에도 있는 책이길래 쭉 읽게 되었다.
들고 다니기엔 너무 무겁다보니 아이패드로 찍어서 지하철에서 짬짬히 읽었더니 굉장히 오래 걸렸다.
(다 읽은 후 캡쳐했던 사진들은 전부 삭제했습니다!!!!!)
1년차도 못채운 나로선 전부 이해하진 못했으나...
실무 코드를 보며 아, 이 부분은 그래서 이렇게 처리했던거구나 식으로 도움이 되는 부분이 있었다.
공부하면서 정리했던 글.
원래부터 있던 글에 설명을 추가기도 하고 책을 읽으며 새로 작성한 글도 있다.
- static과 synchronized https://yeonyeon.tistory.com/113
- Collections와 Map https://yeonyeon.tistory.com/109
- String과 StringBuilder https://yeonyeon.tistory.com/45
기타 다른 메모들 ▼
조건문
- 엄밀히 따지자면 switch보다는 if가 더 빠르다.
- 가독성을 위해 switch를 권장하기도 함.
반복문
- while은 무한 루프를 만들기 쉬우니 for문 권장
- 조건 안에 array.length 같은걸 넣으면 루프 돌때마다 크기를 구한다.
로그
- Log4j 같은 많은 api가 존재하므로 이를 이용하는 것을 추천
- System.out.println()은 성능에 영향을 줌
- 개발용/운영용으로 파일에 저장되는 로그 내역을 선택할 수 있음 (로그 레벨을 통해 구분)
JSP
- include에는 동적, 정적이 따로 존재
- 동적 include를 최소화 해야 속도가 빠르다.
- 동적: <jsp:include page="URL" />
- 정적: <%@include file="URL" %>
DB
- Statement는 쿼리를 수행할때마다 '쿼리 분석 -> 컴파일 -> 실행'을 거친다.
- PreparedStatement 는 캐시에 담았다가 재사용 한다.
- 같은 쿼리를 반복적으로 수행하는 경우 PreparedStatement가 성능이 좋다.
GC
- Java의 메모리 = Heap 메모리 + Non-Heap 메모리
- 클래스 인스턴스 같은 데이터는 Heap 메모리에 저장되며, GC의 대상이 된다.
- System.gc() 수행 시 GC가 가능하지만 JVM 인스턴스가 종료되므로 로컬에서 GC 테스트 할때만 넣자.
처음에는 static을 아무때나 쓰면 안된다는 말에 책을 읽기 시작했는데
점차 GC나 스레드 튜닝, 성능 테스트, 모니터링하는 방법 같은 이야기가 진행된다.
실제로 돌아가고 있는 실무 프로젝트에 적용시켰다가 큰일날까봐 실제로 모니터링 진행은 못했지만...
개발자가 된지 얼마 안되었으니 이런게 있구나, 라고 넘어가고 차차 알아가기로 마음 먹는다.
책에 아쉬운 점이 두 가지 있는데 일단 너무 오래되었다는 것..
지금은 JDK 1.7도 낮은 편이라고 생각하는데 Jdk 1.4~1.5 기준으로 이야기 하는 것도 많다.
우리 회사는 기본적으로 데이터를 Json으로 주고받는 경우가 많고, 전에 들었던 인강에서도 실무에서는 Json을 많이 사용합니다~ 라고 했는데 책에서는 Json은 파싱이 까다로워 xml을 쓰기도 한다는 이야기가 있어서..
지금은 Json 파싱을 편하게 해주는 툴들도 많고 뭘 쓰는 것이 옳다라고 정답이 정해져있는 문제는 아니지만
이 부분에 관해서는 더 찾아봐야 할 것 같다.
또 한 가지는 tool에 대한 설명이 너무 많다는 것...?
예전에 나온 책이다보니 예전에 사용하던 도구를 사용하는 페이지들이 많았다.
당연히 슥슥 넘길 수 밖에 없었고... 갈수록 모니터링 도구는 다양해지고 발전할거라 생각한다.
아무튼 책 한 권 끝냈으니 새로운 책을 찾아봐야겠다.
클린 코드를 읽고 싶은데 이건 도서관에 없어서... e-book으로 사야하나 고민된다.