대용량 데이타를 처리할 때는 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 이다.
- String.split() 대신 StringTokenizer.nextToken()을 사용하라.