캠핑과 개발

대용량 데이타를 처리할 때는 1초 아니 0.001초도 아껴야 한다.
아래의 팁을 활용하여 수행 속도를 줄여 보자.

- 64bit OS 를 사용하고, 아끼지 말고 RAM을 추가해라.
CPU만 지원한다면, 무조건 64bit 운영체제를 설치해서 사용하라. RAM이 4GB 이하라도 설치해라.
CPU의 처리 단위 증가 뿐만 아니라, 메모리를 최대한 사용할 수 있기 때문에 GC의 회수가 감소하여 속도가 더 높아진다.

내 경우, Windows XP 32bit 에서 최대메모리가 약 1.5G 이상 불가능 했는데, 
Windows7 64bit 에서는 OS가 사용하는 메모리를 제외하고 모두 JVM이 사용할 수 있었다. 
1GB 파일을 생성하는데, 대략 5~10배 정도의 실행 시간 차이가 있었다.

- xms, xmx 옵션을 최대한 크게, 그리고 같게 잡는다.
다르게 잡아 줄 경우, 실행 도중에 메모리 할당이 이루어져서 실행 시간이 증가한다.

(1) Windows7 64bit (물리적 메모리가 4g인 경우)
java -jar -xms4g -xmx4g xxx.jar  
재미있는 것은 Windows7 64bit 에서는 이 두 값을 물리적 메모리 보다 크게 잡아도 실행이 된다. 이유는 모르겠다.

(2) Windows XP 32bit (물리적 메모리가 4g인 경우)
java -jar -xms1.5g -xmx1.5g xxx.jar  
아마  1~1.5 사이까지 가능할 것이다. 넘어 가면 실행 자체가 안 되는데 실행가능한 최대값을 찾아 사용하자.

- String 대신 StringBuilder를 사용하라. (단, 스레드를 사용할 경우에는 StringBuffer를 사용하라.)
문자열에 여러 가지 조작을 가할 경우이다. 변하지 않는 문자열의 경우, String을 사용하면 된다.
String을 사용하여도 컴파일러가 적당히 변환해 준다고는 하지만, 컴파일러는 항상 개발자보다 무식하다.

참고로 실행 속도는 StringBuilder > StringBuffer >> String 이며,  
메모리사용량은 StringBuilder = StringBuffer << String 이다.
자세한 비교는 http://hongsgo.egloos.com/2033998 를 참고하라.

- String.split() 대신 StringTokenizer.nextToken()을 사용하라.
StringTokenizer.nextToken()는 사용이 불편하지만 빠르며, String.split()는 사용하기 편하지만 느리다.
token이 빈 문자열일 경우, String.split() 은 ""를 해당 배열 원소에 저장해 주지만, StringTokenizer.nextToken() 는 null을 리턴한다.
단 정규식을 구분자로 사용할 경우는 어쩔 수 없이  String.split() 을 사용해야 한다.
성능비교는  http://ir.bagesoft.com/622 를 참고하라.
 
- Buffered~계열 클래스 (BufferedReader, BufferedWriter 등) 를 사용하라.
이건 너무 쉬운 내용이라. 자세한 것은 검색을 통해 찾아 봐라.

'개발 > Java' 카테고리의 다른 글

java openGL  (0) 2012.08.23
자바 정규표현식  (0) 2012.05.17
Apache Daemon 사용하기  (0) 2012.05.17
Quartz 문서  (0) 2011.07.13
[JAVA] 동적 캐스팅  (0) 2011.06.10