자바

potatos의 이미지

안녕하세요.
알고리즘 사이트에서 제출한답안을보니 자바는 소스코드가 짧은데 실행속도는 100ms을 넘어가더라고요.. 왜그런가요?
c++은 10ms안에끝내는데 왜이렇게많은차이가나는건가요?
그리고 또 왜 알고리즘에서 자바를많이사용하나요??

*java를 무시하는게아닙니다..오해하지말아주세요 ㅠㅠ

klyx의 이미지

자바가 느린 이유에 대해서는 자바 가상 머신에 대해서 찾아보세요.
'알고리즘에서 자바를 많이 사용한다'는 표현은, 알고리즘 수업등에서 자바를 많이 사용한다는 뜻으로 하신 말씀인가요? 아마 자바가 귀찮은 뒷처리를 안해도 되서 알고리즘에만 집중할 수 있으면서도 대중적인 언어이기 때문이 아닐까 싶네요.

emptynote의 이미지

안녕하세요.

자바 프로그래머로써 관심을 가질만한 글이라서요.

죄송하지만 c++ 과 자바 소스 알려주실 수 있나요?

지극히 개인적이며 주관적인 해석이지만,

한국 자바 커뮤니티 다 죽었다 표현할 수 있지만

유독 OKJSP 가 아직도 활동량이 많은것은

아마도 웹 어플리케이션 분야에서의 자바 영향력 때문이지 않을까 합니다.

예를 들면 전자정부 프레임 워크가 자바 스프링 기반인것이 그 예입니다.

자바의 경우 JDK 1.4 에 추가된 NIO 그 자체가 바로 자바가 가진 성능 문제를 말해주는거 아닌가 합니다.

그렇다고 IO 가 아닌곳에서 10배 차이는 솔직히 왜 그런지 궁굼해 지게 하네요.

dontdieych의 이미지

jvm 로딩 시간 이겠죠.

Gethoper의 이미지

공감해요 ^^

cleol의 이미지

자바가 C++에 비해 느린 이유는 근본적으로는 자바가 C++에 비해 훨씬 동적이기 때문입니다.
풀어서 말하자면 C++이 컴파일 타임에 처리하는 것들을 자바는 런타임에 처리하기 때문입니다.
물론 C++을 사용해서도 런타임에 비슷한 처리를 하도록 할 수는 있습니다만
특별히 그럴 필요한 경우가 아니라면 굳이 그럴 이유가 없지요.
반대로 자바의 경우에는 기본적으로 런타임에 처리되는 것들을 컴파일타임에 처리하도록 할 수가 없습니다.
JVM이 선택한 디자인이 그런지라 뭐 어쩔 수 없습니다.
정적 분석에 의한 성능 향상보다 동적인 유연성을 보장하는 것을 더 중요하게 생각하는거지요.

VM을 사용한다는 점은 속도면에서 장점도 있고 단점도 있습니다.
런타임에 많은 일을 하는 것이 불리하기도 하지만, 한편으로 런타임에만 할 수 있는 최적화도 있습니다.
런타임 최적화는 VM을 사용해기때문에 얻을 수 있는 이점입니다.
프로그램이 충분히 긴 시간동안 실행되서 VM로딩 타임과 분석에 필요한 시간을 무시할 수 있는 경우에 확실히 이점이지요.
단점은 당연하게도 직접 기계어 코드가 실행되는 것이 아니라 VM이 코드를 실행하기 때문에 느려지는 것이지요.
JIT나 hotspot 분석 등을 통해서 이를 꽤 상쇄할 수 있기는 합니다.
하지만 Hotspot/JIT가 아무리 좋아져도 위에 말씀드린 동적인 성질은 어쩔 수가 없습니다.
그래서 자바의 동적인 성질이 근본적으로 자바가 C++보다 느릴 수 밖에 없는 이유입니다.

그리고 자바 초보분들이 자바의 성능 문제를 이야기할 때에 주목하는 것이 대체로 속도이지만 사실 속도는 문제가 아닙니다.
자바의 속도는 수치해석이나 큰 규모의 시뮬레이션같은 특정한 분야가 아니면 문제없을 정도로 충분히 빠릅니다.
속도보다는 메모리 사용량이 더 자주 겪게되는 문제입니다.
메모리 가격이 싸져서 많은 경우에 돈으로 해결할 수 있기는 하지만 그래도 문제는 문제이지요.
자바가 많은 메모리를 사용하는 이유는 위에 말씀드린 동적인 성질을 위해서 런타임에 유지해야할 정보가 많은 것도 있고,
JVM이 일을 하기위해서 필요한 메모리 문제도 있고, 가비지 컬렉터가 사용하는 전략 문제도 있습니다.
여하튼 많이 씁니다.

그리고 알고리즘은 많은 경우에 언어와는 무관합니다.
물론 언어의 특성에 의존하는 경우도 있습니다만
자바와 C++은 프로그래밍 패러다임 측면에서 큰 차이가 없기 때문에 자바에서 사용할 수 있는 알고리즘은 C++에서도 사용할 수 있고 반대도 마찬가지입니다.
따라서 알고리즘에 자바를 더 많이 쓴다는 것은 애시당초에 그냥 말이 안됩니다.
다른 분도 이야기하셨지만 알고리즘 교육에 자바가 더 많이 쓰이기는 하지요.
알고리즘과는 관계 없이 언어를 익히는데에 C++보다 자바가 쉽기 때문입니다.
언어 특성보다는 알고리즘 자체에 집중해서 교육할 수 있기 때문에 교육에 자바가 더 많이 쓰이는 거지요.

mirheekl의 이미지

C/C++도 알고리즘 연습에 충분히 효과적인 언어입니다만 이때 항상 꼬리표처럼 따라붙는게 메모리 관리죠. 알고리즘 그 자체는 잘 이해했더라도 포인터를 이해하지 못했을 경우, 특히 알고리즘과 관련된 과제에서는 오류의 확률이 굉장히 높아집니다. 결국 주객이 전도돼서 알고리즘 연습은 거의 하지 못하고 메모리 관련 버그를 찾는 데에 대부분의 시간을 쏟게 되는 경우도 있습니다.

이때 대안으로 생각할 수 있는게 C/C++과 문법상 유사점이 존재하는 C#과 자바입니다만, C#의 경우는 플랫폼상의 제약점때문에 학교 수업에서 채택하기가 어려운 면이 있습니다. IDE는 무료로 쓸 수 있다지만, 애초에 윈도 환경을 선호하지 않는 교수님들이 많다는 것을 생각하면..

--