Connection Pool의 사용 보통 데이터베이스를 연결해 값을 받아올 때 가장 오래걸리는 부분은DriverManager.getConnection() 메소드로 Connection 객체를 얻는 부분이다. WAS와 DB는 통신을 해야하기 때문이다.특히 DB서버가 따로 분리되어 있을 때 소요되는 시간은 더욱 증가한다. 이러한 부분에서 DB서버와 연결하는 대기시간을 줄이고, 네트워크의 부담을줄이기 위해 Connection Pool을 사용해야한다. 요즘 프레임워크에는 보통 Connection Pool이 구비되어 있다. PreparedStatement의 사용 Statement는 PreparedStatement를 사용하는 것이 좋다.일반 Statement를 사용하면 쿼리문장분석, 컴파일, 실행의 단계를 매번 거치..
보통 개발할 때 로그를 찍기위해 System.out.println() 메소드를 자주 사용한다.하지만 이 메소드는 커널 CPU를 많이 점유하기 때문에 성능이 매우 떨어진다. 파일이나 콘솔에 로그를 찍을 경우에는 완전히 출력되거나 저장될 때까지어플리케이션이 대기시간이 발생한다. 그리고 System 로그는 보통 개발 때에만 사용하기 때문에 운영중인 코드에System.out.println 메소드를 방치하면 요청이 발생할 때마다쓸데없는 리소스를 잡아먹게 된다. 운영중인 시스템엔 이 메소드를 모두 없애는게 성능향상에 아주 큰 도움이 된다.
IO에서 발생하는 시간은 CPU의 대기시간에 속하기 때문에 성능에 가장 큰 영향을 끼친다. IO를 효율적으로 사용하기 위해서는 1. 버퍼를 잘 사용하자BufferedReader 등 버퍼를 사용하는 클래스들도 있다.잘 보고 사용하자 2. 요청이 발생할 때마다 파일을 읽어선 안됀다.모든 요청이 올 때마다 파일을 읽도록 한다면 엄청난 IO가 발생할 것이고 이는 성능의 저하를 야기한다.또한 병목현상이 발생할 확률도 높다.보통 DB의 쿼리나 여러 설정들을 파일에 저장하고 사용하는 경우가 많은데이 경우 이 파일들을 미리 읽어놓고 사용하는 것이 좋으며, 수정될 때마다 어플리케이션을 재시작하는 것이 번거롭다면, 별도의 스레드를 생성하여 5~10분 주기로 수정여부를 확인해주는 것도 좋다. 예를 들어보자면 mybatis ..
Synchronized의 정의 하나의 객체에 여러 요청이 동시에 들어오면 연산이 꼬여 이상한 결과가 나올 수 있다.그래서 synchronized 를 선언하여 동기화를 시켜 한번에 한 요청씩 들어오도록 줄을 세우는 것이다. Synchronized를 사용해야 할 때 1. 하나의 객체를 여러 스레드에서 동시에 사용할 경우2. static으로 사용하는 객체를 여러 스레드에서 동시에 사용할 경우 이 외의 경우에 synchronized를 사용하면 대부분 성능에 영향을 미치므로꼭 필요한 경우가 아니면 사용하지 않도록 하자.
static을 잘 사용하면 성능을 향상시킬 수 있지만, 잘못 사용하면 더 느려지거나, 오류가 생기고, 최악의 경우엔 JVM이 죽어버릴 수 있다. static은 여러 JVM에서는 다른 주소나 값을 참조하지만, 같은 JVM이나 WAS에서는 같은 주소를 참조하고, GC의 대상이 되질 않기 때문에 잘못 사용하면 성능을 하락시킬 수 있다. 특히 웹에서는 하나의 static 변수에 여러 스레드가 접근할 수 있으므로 주의해야한다. Static을 잘 사용하기 위해서는 1. 자주 사용하고 절대 변하지 않는 변수는 final static으로 선언한다. 특히 자주 사용하는 쿼리들이나 간단한 목록조회 쿼리도 final static으로 선언하면 GC대상에 포함되지 않기 때문에 성능에 좋다. 즉 템플릿 성격의 객체를 static..
Switch-Case 문 Switch-Case문은 작은 숫자부터 큰 숫자 순서대로 비교하는 것이 제일 빠르다. 조건문 조건문자체는 속도에 미치는 영향이 미미하다. 가독성에 더 신경쓰자. do-while문 public void test(List list){ int i=0; do{ if(list.get(i) == 10) break; }while(true); } 만약 list의 0번째가 10이라면 정상적인 동작을 하겠지만, 아닐 경우 무한루프를 돌며 CPU의 코어 한개를 잡아먹으므로 프로그램을 재시작해야할 수 있다. 조심하자 List를 대상으로 반복 for(int i=0; i
SetSet의 종류에는 HashSet, LinkedHashSet, TreeSet이 있다. Set은 보통 여러 데이터를 넣어두고 해당 데이터가 존재하는지 확인할 때 사용한다.속도는 HashSet이나 LinkedHashSet이 빠르고, TreeSet은 나머지에 비해 현저히 느리다. 그렇다면 왜 TreeSet을 사용할까?TreeSet은 데이터를 저장하는 동시에 정렬한다.그렇기 때문에 데이터를 순서에 따라 탐색하는 작업이 필요할 때에는 TreeSet을 사용하는 것이좋다. 하지만 그럴 필요가 없을 때에는 속도가 빠른 HashSet이나 LinkedHashSet을 사용한다. List 자료형 / 속도순위 삽입 추출 첫번째 값 삭제 마지막 값 삭제 ArrayList 1위 1위 1위 1위 LinkedList 3위 3위 2..
- Total
- Today
- Yesterday
- 메모리
- 날짜
- Java8
- opensource
- 프로세서
- 코어
- 자바 성능
- 람다
- 퍼포먼스
- json
- Swift 2.0
- 리액트
- 자료구조
- react
- gitlab
- 시간
- 성능개선
- RAMDA
- javascript
- 성능
- 클로저
- Java
- 알람
- Stream
- Jackson
- Clojure
- 자바
- Docker
- rambda
- 컴퓨터 시간
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |