본문 바로가기
Computer/Java

Programming Language....

by DogBull 2007. 8. 17.
AMD Winsor 6000+ , 3.0GHz Athlon64 Dual Core.

Java에서 지원하는 Integer형의 최대값 2 ^ 31 - 1.

2147483647

Integer형 for문으로 최대값까지 루프에 걸리는 시간 체크.

2 ^ 31 - 1까지 루프에 소요되는 시간,
Java, 평균 2172밀리섹.
C,     평균 5348밀리섹.

왜 이런 현상이.....?!

특이점,

java에서,
for( int i= 2147483647; i>=0; i--){
    hello h= new hello();
    h= null;
}

c에서,
for( int i=2147483647; i>=0; i--){
    hello* h= new hello();
    delete h;
}

와 같이 했을 경우, 현저한 속도 저하를 보여주는 것이 C.
java에서야 h= null;을 해주지 않아도, Garbage Collector가 알아서 메모리 관리를 해주지만,
c에서는 반드시 delete를 해주어야 한다.

상기한 함수 수행 소요 시간,
 java, 평균 10882밀리섹.
c,      평규 5분 이상.

이해할 수 없는 현상.

java에서 explicit Garbage Collection을 해줄 경우, ( System.gc(); 가 for문 내부에 존재, )
java 역시 5분 이상 소요.


크헉!
쓰면서 하다보니....

C Release Mode에서는 2 ^ 31 - 1 Empty Loop 밀리초로는 측정 불가.
hello 클래스 생성/삭제 283008밀리섹 소요.

1. C, 완성된 것은 반드시 릴리즈로 컴파일.
2. 릴리즈 모드에서도 클래스 생성 / 삭제를 자바와 같이 쉽게 생각해서는 안됨.
3. Java는 상대적으로 느리지만, C의 개념없는 코드보다는 훨씬 빠르다.