[첫화면으로]Diary/Perl대Java

마지막으로 [b]

/Perl대Java

  • The basis :: Perl vs Java 간단한 정규표현식 문자열 치환 성능[1] by 나야
  • Java VS Perl - aero's Blog[2] by aero

aero님 블로그에서 [2]를 보고 [1]까지 보게 됐는데... "Perl이 4배나 느리게" 나왔다는 [1]의 결과가 뜻밖이어서 주인장도 해 보았습니다.

  • 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

  • 테스트 코드는 [1]의 나야님의 코드와 [2]의 aero님의 코드에서
    • [1]에서처럼 스트링 생성하는 부분도 따로 측정하게 했습니다.
    • [2]에서 언급한 것처럼 use encoding 프라그마 대신 use utf8 프라그마를 사용했습니다.
    • 스트링을 생성할 때 Perl에서는 [2]와 같이 "x"연산자를 사용했습니다.
    • 주인장 컴퓨터가 32비트 XP머신이어서 그런지 램이 적어서 그런지 몰라도, [1]처럼 "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

루프와 "."를 사용했을 때는 펄과 자바가 얼추 비슷하게 나오고 있죠. 이건 [1]에서와 결국 같은 결과인데... 어째서 윈도우에서 딸기펄을 썼을 때는 저렇게 느려지는 것인지 모르겠습니다. 딸기펄의 perl 인터프리터 구현에 문제가 있는 것인지...

스트링 생성은 그렇다치고, 치환의 경우는... 이쪽 머신에서 테스트할 때는 펄이 2.5배가량 빠르네요 :-D
-- Raymundo 2009-4-26 4:22 am

"."을 사용해서 긴 스트링을 만들때의 속도를 따로 측정해 봤습니다. Perl/StringConcatenationBenchmark
-- Raymundo 2009-4-26 6:44 pm

Comments & Trackbacks

둘이 싸우는 거야?? perl vs java.. Fight!!
-- Zehn02 2009-4-26 4:23 pm

;;;;
-- Raymundo 2009-4-26 6:44 pm

자바쪽에서 -Xmx128 옵션을 주고 횟수를 늘리면 어떻게 나오나요? 궁굼하네요.
-- 밀리네스 2009-4-30 6:52 pm

본문에 언급한 리눅스 머신에서, 백만번으로 늘린 후, -Xmx128m 로는 여전히 out of memory 뜨고, 256m 해주니까 에러가 안 나고, append 루프의 시간은 1.3초 정도 걸리는군요. 4배로 늘었으니 1.6초 정도 걸려야 될 것 같은데 더 짧아지는 건 용하군요. :-D
-- Raymundo 2009-4-30 7:39 pm

StringBuilder sb = new StringBuilder(src.length() * 1000001 );
로 만들면 아마 펄과 비슷하거나 좀더 빠른 append 가 될거같습니다.
-- 밀리네스 2009-5-1 4:51 pm

생성자에 미리 최종 길이만큼의 용량을 잡으라고 하나보죠? 아무래도 그럼 더 빠르겠죠 ^^ 반 정도로 주는 것 같네요 (오래 테스트할 여유가 없어서 한두번만 실행해봤습니다. 25만번 돌리는데 210ms 정도)
-- Raymundo 2009-5-1 5:00 pm
이름:  
Homepage:
내용:
 


주인장분류

<<   /베드민턴 (2009-04-26)[p]   | /Perl대Java (2009-04-26) |   /9년 (2009-04-23)[n]   >>

Diary

최근 글들

코멘트와 트랙백

옛 글들

  • /Archive - 월별로 한번에 보기
  • /List - 전체 포스트 목록

RSS

주요 페이지

이 홈페이지의 인터위키는 다음과 같습니다.
GyparkWiki  UTF-8
https://gypark.pe.kr/wiki/


마지막 편집일: 2012-2-11 12:25 am (변경사항 [d])
1683 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기