14 번째 수정본 소스 보기 : Diary/Perl대Java
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: Diary/Perl대Java 는 읽기 전용 페이지입니다.
#TEMPLATE [[Diary/DynamicTemplate]]
== [[/Perl대Java]] == * The basis :: Perl vs Java 간단한 정규표현식 문자열 치환 성능[http://thebasis.tistory.com/89] by 나야 * Java VS Perl - aero's Blog[http://aero.sarang.net/blog/2009/04/java-vs-perl.html] by aero aero님 블로그에서 [http://aero.sarang.net/blog/2009/04/java-vs-perl.html]를 보고 [http://thebasis.tistory.com/89]까지 보게 됐는데... "''[[Perl]]이 4배나 느리게''" 나왔다는 [http://thebasis.tistory.com/89]의 결과가 뜻밖이어서 [[주인장]]도 해 보았습니다. * AMD Athlon 64 X2 Dual 5600+ * 2GB RAM * Windows XP SP2 * Java SE 1.6.0_11 Runtime (java컴파일러가 설치되어 있지 않아서, 리눅스 서버에서 javac 1.6.0_05에서 컴파일한 후 클래스만 가져왔습니다) * Strawberry Perl 5.10.0 * 테스트 코드는 [http://thebasis.tistory.com/89]의 나야님의 코드와 [http://aero.sarang.net/blog/2009/04/java-vs-perl.html]의 aero님의 코드에서 ** [http://thebasis.tistory.com/89]에서처럼 스트링 생성하는 부분도 따로 측정하게 했습니다. ** [http://aero.sarang.net/blog/2009/04/java-vs-perl.html]에서 언급한 것처럼 use encoding 프라그마 대신 use utf8 프라그마를 사용했습니다. ** 스트링을 생성할 때 Perl에서는 [http://aero.sarang.net/blog/2009/04/java-vs-perl.html]와 같이 "x"연산자를 사용했습니다. ** 주인장 컴퓨터가 32비트 XP머신이어서 그런지 램이 적어서 그런지 몰라도, [http://thebasis.tistory.com/89]처럼 "20글자 * 10,000,000배"의 스트링을 만들려니 자바에서 heap공간이 없다고 out of memory 에러를 내는군요. 그래서 "* 275,000배"로 줄였습니다. * java, perl 각각 10번씩 테스트 결과: {{{ 스트링 생성 정규식 치환 (단위: ms) Java Perl Java Perl 187 27 641 359 188 27 640 361 187 27 625 359 188 28 640 359 187 27 641 356 188 27 625 359 187 27 641 359 188 27 625 359 187 28 641 361 188 28 656 359 }}} 스트링 생성은 6.8배, 치환은 1.7배 펄이 자바보다 빠르네요? :-D 물론 이건 제 환경에서의 결과이니, 다른 머신 다른 OS 다른 컴파일러/인터프리터 환경에서는 또 다르겠죠. 어쨌거나 이 정도 실험만으로 일반적으로 어느쪽이 얼마만큼 빠르다,느리다라고 말을 할 수는 없다고 생각됩니다. \\ \\ \\ "스트링 생성" 테스트에서는 좀 희한한 결과가 있는데... Perl 쪽에서도 "x"연산자를 사용하지 않고 Java에서처럼 for 루프를 돌면서 "."연산자를 사용하여 매번 스트링을 덧붙이는 방식으로 테스트했더만... Perl에서 "x"연산자를 사용했을때 약 27밀리초 걸리던 것이... for+"." 조합에서는 자그마치 17초 정도가 걸리더군요. -_-;;;;; 도무지 이상해서... 리눅스에 Perl 5.8.3 이 깔린 곳에서 동일한 비교를 해보았습니다. {{{ 스트링 생성 정규표현식 치환 Java Perl-x Perl-. Java Perl-x Perl-. 407 79 521 2156 874 766 408 79 534 2170 846 805 407 78 518 2176 788 885 407 79 526 2159 755 761 410 80 522 2162 818 797 408 79 534 2173 826 765 407 78 521 2174 797 887 406 79 534 2166 823 893 406 79 520 2154 843 898 406 79 527 2152 843 782 }}} 루프와 "."를 사용했을 때는 펄과 자바가 얼추 비슷하게 나오고 있죠. 이건 [http://thebasis.tistory.com/89]에서와 결국 같은 결과인데... 어째서 윈도우에서 딸기펄을 썼을 때는 저렇게 느려지는 것인지 모르겠습니다. 딸기펄의 perl 인터프리터 구현에 문제가 있는 것인지... 스트링 생성은 그렇다치고, 치환의 경우는... 이쪽 머신에서 테스트할 때는 펄이 2.5배가량 빠르네요 :-D
"."을 사용해서 긴 스트링을 만들때의 속도를 따로 측정해 봤습니다. [[Perl/StringConcatenationBenchmark]]
===== Comments & Trackbacks ===== 둘이 싸우는 거야?? perl vs java.. Fight!!
: ;;;;
자바쪽에서 -Xmx128 옵션을 주고 횟수를 늘리면 어떻게 나오나요? 궁굼하네요.
: 본문에 언급한 리눅스 머신에서, 백만번으로 늘린 후, -Xmx128m 로는 여전히 out of memory 뜨고, 256m 해주니까 에러가 안 나고, append 루프의 시간은 1.3초 정도 걸리는군요. 4배로 늘었으니 1.6초 정도 걸려야 될 것 같은데 더 짧아지는 건 용하군요. :-D
StringBuilder sb = new StringBuilder(src.length() * 1000001 ); \\ 로 만들면 아마 펄과 비슷하거나 좀더 빠른 append 가 될거같습니다.
---- [[주인장분류]]
Diary/Perl대Java
페이지로 돌아가기 |
다른 수정본 보기