2009.04.23 21:09
요즘 수업중에 Perl을 아주 조금 써보고 있는데, Perl의 성능이 궁금해서 찾아보는데, 최근 결과가 별로 없어서 간단한 정규표현식 테스트를 직접해보았습니다. 알파벳과 한글이 같이 있는 문자열에서 알파벳을 알파벳이 아닌 문자를 '_'로 바꾸는  테스트입니다. 정규표현식 문자열 치환 테스트를 하는 이유는 펄에서 정규표현식을 언어수준에서 잘 지윈하고 있기 때문입니다.
CPU Q6600, Memory 4G, Fedora 10 x86_64, Java는 openJDK 1.6 x86_64, Perl은 perl.x86_64 에서 이클립스로 작성후 테스트.

결론부터 말씀드리자면 일단 속도에서는 자바 완승,
메모리는 Perl 완승 입니다.

실제 코드는 다음과 같습니다.
자바
StringBuilder 를 사용해서 문자열을 붙이고 String 클래스의 replaceAll 메소드를 사용해서 치환합니다.

다음은 펄.
. 를 사용해서 문자열을 붙이고, s/ / /g를 사용해서 치환합니다.
펄에서도 미리초를 가져오는 모듈도 있는데, 제가 아직 모듈을 설치할 줄 모르고 귀찮아서 패스...

어쨌거나 문자열을 붙이는 데 걸리는 시간
자바 2.514초
펄    2 초
펄 결과는 초단위므로 비교어려움. 거의 유사한 속도를 보인것으로 보임.

다음은 치환하는데 걸리는 시간.
자바 6.860초
펄    27초
자바가 펄보다 4배 정도 빠름

충격적인 결과. 메모리 사용량(System Monitor를 통해 눈으로 확인)
자바
문자열 생성할 때의 메모리 사용량 650M 정도
문자열 치환할 때의 메모리 사용량 950M 정도

문자열 생성할 때의 메모리 사용량 290M 정도
문자열 치환할 때의 메모리 사용량 389M 정도
자바가 펄보다 2배나 메모리 많이 사용함

...사실 2억자를 파일에 써보니(UTF-8) 400,000,040 bytes 가 되네요. 대략 400메가 정도?
펄이 파일에 기록한 후의 크기보다 적은 메모리를 사용한 다는 것이 인상적이네요. 메모리엔 그냥 정수도 갖고 있어서 그런가...

...
어쨌든 자바가 펄보다 더 빠르긴 하네욥.

트랙백 주신 글이나 댓글을 보면, 펄에서 utf-8 인코딩을 사용하는 방법이나 치환 방법에 문제가 있었습니다.
펄을 잘 모르는 초보자의 성급한 결론이었습니다.
^^;;;;;
Posted by 나야