공룡호가 사는 세상 이야기

포스팅을 해 놓고 비공개로 설정된 것을 몰랐다니...-_- 어쨌든 이달 마지막 리뷰.
간단한 이야기를 하나 해 보자.

'갑' 기업의 새로운 업무 프로세스를 '을'기업에서 저렴한 비용으로 개발을 하게 되었다.
많은 회의 끝에 시스템이 도입되었고, 해당 시스템 위에서 6개월간 개발되었다.
6개월 후, 프로그램 테스트에서 결함이 발견되었다. 다름아닌 '성능'이었다.
개발의 완료단계에서 '성능'이 이슈가 되어 '을'은 굉장히 당황스러웠다.
결국은 시스템의 하드웨어를 증설하여 성능 문제를 어느정도 개선시킬 수 밖에 없게 되었다.

이러한 사례를 가끔 보게되는데, 요즘같은 고성능 하드웨어 시대에서 조차 프로그램 성능을 고려하지 않을 수는 없다. dW에서 자바코드 벤치마킹을 두 편에 걸쳐 연재하게 되었는데, 그 첫번째가 번역되었다.

Listing 1. 성능 수수께끼

protected static int global;

public static void main(String[] args) {
    long t1 = System.nanoTime();

    int value = 0;
    for (int i = 0; i < 100 * 1000 * 1000; i++) {
        value = calculate(value);
    }

    long t2 = System.nanoTime();
    System.out.println("Execution time: " + ((t2 - t1) * 1e-6) + " milliseconds");
}

protected static int calculate(int arg) {
    //L1: assert (arg >= 0) : "should be positive";
    //L2: if (arg < 0) throw new IllegalArgumentException("arg = " + arg + " < 0");

    global = arg * 6;
    global += 3;
    global /= 2;
    return arg + 2;
}


 다음 중 어느 버전의 실행 속도가 가장 빠를까?

  1. 코드를 그대로 둔다(calculatearg를 테스트하지 않음).
  2. L1만 코멘트를 해제하지만 조건 확인(assertion)은 비활성화하여 실행(JVM 옵션 중 -disableassertions 사용. 이는 JVM의 기본 동작임)
  3. L1만 코멘트를 해제하지만 조건 확인은 활성화하여 실행(JVM 옵션 중 -enableassertions 사용)
  4. L2만 코멘트를 해제한다.

적어도 테스트를 전혀 하지 않는 A가 가장 빠를 것이라고 짐작할 것이다. 그리고 좋은 동적 최적화 컴파일러가 죽은 코드인 L1은 제거할 것이므로, 조건 확인을 끈 B쪽이 A에 근접한 성능을 보일 것이라 짐작하리라. 그렇지 않은가? 불행히도 이러한 짐작은 틀렸다. 위의 코드는 Cliff Click이 2002 자바원(JavaOne)에서 소개한 것을 수정하였다. 그가 발표한 실행 시간은 다음과 같다.

놀라운 결과와 다양한 이슈들은 아래 링크에서 확인하자.
링크 : http://www.ibm.com/developerworks/kr/library/j-benchmark1.html#listing1

마음이 급하여 Part 2의 원문을 확인하고 싶으신 분들은 아래로.
링크 : http://www-128.ibm.com/developerworks/java/library/j-benchmark2/

'IBM dW review' 카테고리의 다른 글

배시 셸로 작업하기  (0) 2008.08.31
유닉스와 리눅스 함께 어울리기.  (0) 2008.08.31
Ajax에서 XML 처리하기, Part 3  (0) 2008.07.30
10가지 더 좋은 유닉스 습관  (0) 2008.07.30
Ajax에서 XML 처리하기, Part 2  (0) 2008.06.30





제9회 자바 개발자 컨퍼런스를 다녀왔다.
사진기를 가져가지 않아, 인터넷에서 구한 사진으로 대체-_-; (http://blog.naver.com/pmj09142 퍼옴)
오전에 축구 한게임 하고 오후에나 도착해서, 사람은 그다지 많지 않을 것으로 예상했는데 아니었다.



썬은 하드웨어 벤더이긴 하나, 자바 때문에 이번 컨퍼런스의 핵심이기도 하다.
경쟁사이지만 좀 부럽더라. - 마찬가지로 사진 퍼옴(http://blog.naver.com/lyia2)



IBM도 참가했는데, 우리회사랑 HP는 없다. 아쉽다. 저기 권환이 회사도 보이는구나.
사람은 정말 많았다.(짜증날 정도로) - 마찬가지로 사진 퍼옴(http://blog.naver.com/lyia2)
사진을 퍼 온 블로그에서 읽고 알았는데 티맥스에서 상담 받으면 2G 메모리 스틱을 줬다는데 ㅠㅠ



IBM의 세션. 이과장님과 성균씨 오랫만에 뵙고 인사도 드렸다. 조만간 모임할 예정이라는데, 언제쯤일지..
다음에 모니터 요원 모임이나 발대식 있으면 규현이와 함께 가야지.
- 마찬가지로 사진 퍼옴(http://blog.naver.com/lyia2)





DAUM에 입사한 규현이를 만났다. 함께 입사한 개발자 분과 인사 나누고, 커피한잔.
디카 샀다고 자랑은 -_-...
늦게 가서 정신없이 인사하고 구경하다가 돌아오는 길에 함께 리뷰 블로거 활동중이신 영회님 뵙고 인사.
아직 명함이 안나와서 뻘쭘하긴 했지만 반가웠다. 두번 째 뵙는 것이고 잠깐이지만 인상이 참 좋으신 분이다.

끝나고 수희누나 꼬드겨서 비싼 저녁 얻어먹고, 원석이 만나서 삼겹살에 쇠주한잔.
주말도 빡빡한 일정으로 가득가득 채우는게 참 좋다.
몸이 쉬면 마음이 불편하다.
난 아직 젊으니까. :)