누가 자바를 느리다고 했나?

geekforum의 이미지

오늘도 인터넷을 뒤지다 제임스 고슬링의 인터뷰 기사가 있어서 관심있게 읽어 나가다 지금까지 당연시 되어왔던 문제인 자바의 실행 속도에 관한 언급이 있어 글을 씁니다. 자세한 내용은 관련 링크를 참고하세요.

요는 "자바는 느리다고 주장하는 것이 최악이다. 현재 사용되고 있는 JIT 컴파일러는 탁월하다. 벤치마크 결과 C와 C++ 코드를 앞섰다. 사용자가 사용하고 있는 칩셋을 정확히 알고 있기 때문에 일반적인 최적화가 아닌 칩셋에 맞는 최적화를 할 수 있다. 정적인 컴파일러는 프로그램에서 무엇을 수행하는지 알지 못한다." 라는 말인데 정말 맞는 건지 궁금해 집니다.

뭐 저도 자바로 개발을 하지만 저는 주로 서버쪽(JSP,Servlet,Bean)이라 자바의 실행 속도 보다는 다른(네트웍) 부분이 더 속도에 있어 민감한지라...이 부분에 대한 여러분들의 견해나 경험을 듣고 싶습니다.

익명 사용자의 이미지

아... '오픈' 한다는 뜻이었습니다 :) 예를들어 자바 코어 라이브러리의 소스도 JDK에 src.zip로 포함되어 있지만 이를 한 번이라도 본 사람은 Kaffe와 같은 오픈소스 VM 개발에 참여할 수 없습니다.

이런게 문제지요.

익명 사용자의 이미지

지나가다가..

윗 분은 src.zip 가 아닌 선사이트에서 받을 수 있는

별도의 소스를 말씀하신 듯 한데요..

.h 와 .c가 담겨있는...

조기태의 이미지

제 말이 그 말인데요 ㅡ.ㅡ;;

JVM소스도 src.zip 처럼 공개되어있지만 그렇다고 이를 이용해 별도의 VM과 같은 독립된 제품을 만들 수 있는 건 아닙니다.

익명 사용자의 이미지

만들 수 있습니다. 단지 호환성 테스트를 받아야 합니다.

익명 사용자의 이미지

저도 전적으로 동의합니다.

MS도 .NET으로 도망가는 마당에 리눅스도 J2EE를 적극 수용하는게 중요하다고 봅니다. 물론 썬의 오픈소스 지원이 미흡했던것도 사실이지만 지적하신 Jakarta project 같은 경우를 봐도 썬의 태도도 꽤 변한건 사실입니다.
역시 엔터프라이즈 환경에선 J2EE와 오라클 같은 대형 DBMS의 도움이 필수적이라고 봅니다. 무조건 오픈소스여야만한다고 생각하지는 않습니다.
넷스케이프가 OS라는 기본 인프라가 없었기 때문에 IE+윈도우 조합에 밀린걸 생각하면 DBMS벤더들도 리눅스를 달리 생각하는것 같습니다.
적어도 누구의 소유도 아닌 모두의 소유인 OS에 기반한다는건 상업적인 벤더들도 서로 부담이 없이 자유롭게 경쟁할 수 있으니까요.

썬의 경우 오픈소스 지원에 대한 진지함이나 개발자 커뮤니티의 의견을 수용하는 정도에선 적어도 MS보다는 낫다고 생각됩니다.
그리고 원래 자바는 C/C++시장 대체하기 힘듭니다. 다른 목적으로 나온놈이니
너무 미워하지는 마시기 바랍니다. 임베디드나 자바카드(스마트카드), 서버 사이드 개발환경에서는 지금도 가파르게 성장하는 언어중의 하나라고 봅니다.

익명 사용자의 이미지

리눅스 게발자들이.. 자바를 싫어 한다.. 기 보다는
C++ 프로그래머들이.. 자바랑 동급 취급 당하는게..
싫은게.. 아닌가.. 그런 생각이듭미다.. 적어도..
이런.. 포럼에서는 말이죠.. 자바는 플랫폼 독립적
이고.. 리눅스 랑.. 연관이.. 별루
없어 보입미다.. 소스라도 오픈 하면 모를까..

"사람들은 항상 자기가 하는일에.. 자부심을 가지고
있다.. 그래서 쉽게 기만하기 쉽다.. "
마키아 벨리

익명 사용자의 이미지

good~

조기태의 이미지

좀 제대로 알고 비판을 하던 옹호를 하던 했으면 좋겠습니다. 자바가 빠르다고 주장한 사람들도, 스윙이나 AWT가 MFC보다 빠르다고 말하는게 아닙니다.

JIT 기술을 이용해 주로 반복적인 연산을 수행하는 작업에서 런타임 최적화를 할 수 없는 C/C++보다 빠르다는 뜻입니다. 여기에 대해서는 벤치마크 결과도 많이 있으니 참고 하시기 바랍니다. 그냥 애플릿 한 두번 돌려봤다고 느리네 빠르네 하진 말았으면 합니다.

그리고 GUI부분도 JVM의 로딩시간과 실제 동작하는 속도도 구분 못하는 사람들도 많지만, 요즘에 왠만한 PC에서 JEdit를 한 번 써보시기 바랍니다. 로딩 시간을 빼면 사용시에 체감할 정도의 성능저하는 없을 겁니다.

여기서 부턴 개인적인 생각이지만, 클라이언트의 경우도 가능성이 아주 없는 것은 아닙니다. 시야를 넓게 생각하시기 바랍니다. JDK 1.5대에서 VM을 공유할 수 있게되면 로딩시간 문제도 획기적으로 개선 가능합니다. 또 자바 웹스타트의 성공여부에 따라 클라이언트 쪽도 많이 영향을 받을 겁니다. 그리고 단 몇년 사이에 CPU와 RAM표준 사양이 몇 배씩 뛰는 걸 생각하면 클라이언트 측에서 자바의 앞날도 단정할 수 없습니다.

클라이언트 시장이 1-2년 안에 사라지는 것도 아니고 자바가 1-2년 사이에 없어지는 것도 아닙니다.

익명 사용자의 이미지

www.linux.co.kr에 가보면.. 기사냉요과
그에 대한.. 논쟁이.. 여기보다 더..
뜨겁네요.. 한번 읽어 보시길..

자바는 이제 제대로 완성된 응용 프로그램을
같이 내세워야 하지 않을까요.. 그 단순한
메모장도.. 뻐뻑 거렸는데..

실제로 자바로 포토샵을 만들거나...
리니지를 만드는것은 불가능에 가까운게..
사실 이잖습미까..

우리 나라 같이 게임 이 발달한 나라에서 자바로
성공한 게임 사이트가 없잖습미까.. 대부분
ActiveX와 C++을 이용 할뿐..이죠..

자존심만 내세우지 마시고.. 실질적으로
클라이언트에서 경쟁력있는 유틸리티를
한번 보고 싶습미다.. 그럼 누가.. 딴지
걸겠습미까..

익명 사용자의 이미지

음.. 좀 알고나 뭐라고 하시길,

리니지 정도 클라이언트가 안된다구 -_-;;; 원 참..

자바게이밍에 가보시길.

익명 사용자의 이미지

......;

익명 사용자의 이미지

자바 게이밍.. 그게 경쟁력 있는 싸이트입미까..
첨 듣는데요.. 적어도 한게임이나 넷마블 정도는 되야죠..
리니지 클라이언트가 가능하다.. .. 이건..
뭐라 해야질..

익명 사용자의 이미지

이사람 뭐야.. -_-;;;

익명 사용자의 이미지

.......;

익명 사용자의 이미지

참고로 url을 올려 놓습니다.

www.javagaming.org

약간의 스크린 샷들과... 그외의 정보들이 있습니다.
표면에 있는 스크린 샷들은 3D관련 API(ex. java3D API)들을

이용해 만든 몇가지 게임들을 소개하고 있군요...
최근에 나오는 3D 겜들에 비해 퀄리티가 떨어지는건
사실이지만, 확실히 가능성을 느낄 수 있으실 겁니다.

아마 메이져급 게임 회사가 게임을 만들었다면 퀄리티나 성능면에서
훨씬 앞선 타이틀이 나올 수도 있을겁니다.

익명 사용자의 이미지

메이저는 아니지만 자바 게이밍에

링크되어 있는 몇몇 사이트에는 정말로 놀란만한

퀄리티와 속도의 게임이 있네요.

하나씩 가보는 것도 재미있네요.

익명 사용자의 이미지

한게임, 넷마블 -_-;;;

에휴..., 그냥 말을 말자.

익명 사용자의 이미지

C 코드 역시 속도면에서 컴파일러에 의존적인 부분이 있는게 아닌지.. C코드를 그 칩셋에서 최적의 성능을 발휘하는 컴파일러로 컴파일을 했다면.. 결과는 다르지 않았을까요. (또한 동일한 코드로 비교를 했다면 약간의 억지가 있지 않나.. 라는 생각을 합니다.)

코더의 능력과 컴파일러에 의존적이지만 특정플랫폼에서 최적의 속도를 내는 결과물을 낼 수 있는 언어는 단연 C 라고 생각합니다.

조기태의 이미지

JIT 는 말그대로 Just-In-Time 즉, 런타임에 동작하는 개념입니다. C컴파일러와는 조금 개념이 다릅니다.

익명 사용자의 이미지

아닌것은 아닌것이다.

아닌것을 맞다고 우겨도 맞을수 없지 않은가

자바는 그 생소한 아이디어에 혹해서 많은 이들이 하고 있지만 기대만큼은 발전속도가 빠르지 못해 조만간 도태될 것이 확실하니 빨리 프로그래머들은 줄을 바꾸세요.
차라리 IBM에서 자바의 라이센스를 관리하고 발전시켰다면 지금 상황이 많이 달라졌을 것인데....
언제 망할지 모르는 썬사에서 이런 것을 한다는 것은 많은 프로그래머에게는 재앙과도 같은 것이다.

익명 사용자의 이미지

맞는 말이다.
자바는 느리다.

코딩기술로 속도를 극복할 수 있다는 말은 하지 마라. 이말은 언어간의 속도를 비교하는 것 자체를 무의미하게 만든다.

익명 사용자의 이미지

누가 속도 안빠르다구 그랬나..
GUI 속도가 너무 느리다구 그랬지..

그러니 만년 서버 프로그램 이외에 별다른
대 쓰이지 않는것 아닙미까...

자바로 게임을 만들고 유틸도 만들수 있어.. 이러지만
단순한 생김새에.. 속도가 거북이..니 탈이지..

개인적으로.. 자바도 역시 C++이다라구 생각합미다..

"프로그래머들은 자랑좀 하지말자.... "

익명 사용자의 이미지

혹시 SWT라고 들어보셨나요? 아니면 Skin L&F나 Kunststoff L&F은 들어보셨나요?

"어줍잖게 아는척 하지 맙시다..."

익명 사용자의 이미지

그거 역시 거북이 잖아...
SWT다 돌려보니.. 자바는.. 자바던데..
내 컴을 바꿀까 보다..

익명 사용자의 이미지

거 혹시 SWT 뭔지 확실히 아시는거 맞으시죠?

익명 사용자의 이미지

최근에 발표된 j2sdk 1.4.0 의 java2d 데모는 의외로 빠르더군요.
1024x768 에 32bit color 에서 75 frame 을 목격할 수 있었습니다.
보면서 "정말 이거 자바 맞나" 싶더군요.
swing 만큼은 예나 지금이나 정말 느린데, 다른 부분은 그렇지 않은듯 싶습니다.

익명 사용자의 이미지

미안하지만, 얼마나 프로그램을

못 만들었으면, 그 정도 퍼포먼스가 나오는지,

jdk 1.1.8 + swing set 으로도

이 정도 프로그램은 충분할텐데... 쯧쯧.

익명 사용자의 이미지

전... 아무꺼나 빨라도 상관없습니다.
C든 C++이든 자바든 아니면 아무 프로그래밍 언어나 똑빠로 짤 수 있었으면 좋겠습니다. ㅜ.ㅜ

29살 먹고도 프로그램 제대로 못 짜는 초보 ㅜ.ㅜ

익명 사용자의 이미지

자바가 느리다는 말은 제가 했슈..

몇년전 swing + jdk 1.2 + jmf 가지고 꽤 큰 프로젝트를 했지요(저한텐)

한 6달 걸쳐서 만들었는데.. 실행속도.. 죽어죽어

음성을 실시간으로 보내야 하는데.. 여기서 말하면 ㅋㅋ 저쪽에서 2초있다 말이 들리고..

그림 그릴때 마우스로 빨리 동그라미를 그리면 세모가 그려진다는...

얼마전에 램 1기가에 cpu 젤 좋은거 써서 돌린 자바 오피스 봤더니 잘 돌아가긴 하더군요 ㅡ.ㅡ;; 헐~ 근데 자바 돌릴라구 1기가 달아야 하나

그때 이후로 자바가 너무 싫어서 자바 절때 안쓰고 있음..

차라리 그때 비베로 프로젝트 했으면 3개월 만에 끝내고 속도도 훨 빨랐을것을 ㅡ.ㅡ++

자바가 빠르다는건 서버쪽 영역( 기타 몇가지 ??)에 한정됬을 뿐이지 자바 자체가 빠르다는건 이해가 안됨

익명 사용자의 이미지

요즘에야 CPU 2기가를 달리지만 그때만 해도

486에서 gui 부분을 제외한 부분을 만들었고..

GUI 는 집에서 233 가지고 했는데 헐..

그리고 최근 컴퓨터에서 돌린다고해도 글쎄요..

그리고 GUI 에서만 느리다는데 ㅋㅋ

요즘 왠만한 프로그램 거의다 GUI 쓰지 않나.. 그러니까 자바는 일부 영역으로 제한되는 거죠..

그리고 다들 자바로 서버쪽 프로그램만 짜보신거 같은데 자바로 만든 프로그램 배포하는데 고생해보신분 있나요?

하긴 클라이언트 영역에서 자바를 쓴다는 건 연장을 잘못 썼죠..

knight2000_의 이미지

그래요? 그림이 잘못 그려진다니 이해할 수 없군요.
인터넷에서 오에카키를 구현하는 것 봤는데...
언제부터인가... 맨끝에 붙는 것이 cgi가 아니라. class로 바뀌어 있는 것이 상당수이던데요.
아니면, 일본쪽에서만 그런가요?

익명 사용자의 이미지

빨리 동그라미 그리면 빨리 그려지던데... ^^!

익명 사용자의 이미지

자바가 느린 것은 gui 에 관련된 쪽(특히 swing) 뿐이지 나머지는 빠릅니다.

Renn의 이미지

많은 사람들이 당연한 사실을 모르는 것 같습니다. 어떠한 언어로 작성되어지든 간에, 그것을 만든이에 따라 속도가 달라진다는 것이죠.

실제로 밑의 어느분이 적어놓으셨던 C와 C++의 sort속도 차이. 그것은 구조적으로 어떻게 만들어 졌냐에 따른 차이가 확실하게 보이는 부분입니다. 자신이 작성하면 C로 더 빠르게 만들 수 있다구요? STL의 sort알고리즘이나 C의 qsort 함수는 범용입니다. 물론 이것도 플래폼(OS, Compiler, STL distribution 등등...)

중요한 점은 각 언어의 특성이겠죠. 일반적으로 Java가 느리다고 알려져 있지만, 모든 분야라는 것은 *절대로* 아닙니다. 예를 들어서 서버 플랫폼용으로 작성한다면 Java의 언어 구조 특성상이라든지 제공되는 API, 또 그것의 최적화 여부에 의해서 오히려 C/C++보다 빨라질 수도 있지요. 충분히 가능합니다. (물론 C로 *완벽*하게 작성된 프로그램을 따라갈 수 있는것은.. 어셈블리... 정도?) 더구나 (반드시 그런것을 아니지만) 여기서 제작 비용을 획기적으로 줄일 수 있는 보너스가 생기지요.

하여간 이런 결론으로 특정 언어로 작성된 프로그램의 실행 속도에 관련해서는 토론의 필요가 없다고 생각됩니다. (단, 특정 분야는 제외해야 되겠군요. OS나 임베디드나 기타 몇몇 로레벨 분야...)

하지만, 확실히 Java의 실행 속도는 예전에 비해 상당히 빨라진 느낌입니다. python이 너무 느리게 느껴지거든요. 개인적으론 python을 더 좋아해서 문제지요. python이 더 빨라지기를 바라며 :)
--
Seo, Hee-Seung.
http://anitype.net/

익명 사용자의 이미지

속도도 문제지만 자바의 근본적 문제점으로는 앞으로 일상가전또는 메카트로닉스에 도입될 경우 JVM에 대한 썬사의 라이센스 정책이 문제가 될겁니다.
반면에 C#은 현재는 크로스 컴파일을 통해서 다른 플랫폼에서 MS의 코드에 전적으로 영향을 받지만 현재 추진중인 오픈소스진영의 새롭게 만들어질 코드가 보편화된다면 이런문제가 근본적으로 생기지 않을거라 합니다.
사실 앞으로 우리사회의 모든부분에 도입될 컴퓨터에 비하면 PC는 세발에 피라고 할수밖에 없지요.

자바의 예정된 몰락은 근본적으로 썬사의 회장의 인간성이 더러운게 가장 큰 이유지요.

익명 사용자의 이미지

스콧 맥닐리를 존경하는 사람중의 한명으로써 당신의 발언에 옐로카드~~

익명 사용자의 이미지

미친넘 존경할 인물을 존경해라.

익명 사용자의 이미지

c# 팔아먹는 빌게이츠는 안더럽나요? 웃기는군요.

익명 사용자의 이미지

스콧맥닐리는 빌이 잘되는 거 못보죠...

차이는 스콧맥닐리는 막말하고, 빌은 말로안할뿐이죠.

선이 무너지면 자바는 어떻게 될까...

백일몽의 이미지

linux.co.kr 에도 똑같은 글이 있던데 같은 분이신가봐요

익명 사용자의 이미지

음... 대체 무슨 근거로 이런 글을 내뱉는건지 알 수가 없네요. -_-;

익명 사용자의 이미지

정말 전부다 똑똑이들 밖에 없군요.
아직도 속도타령을 하시다니...
설계하기에 따라 필요에 따라 적절히 얼마나 잘 사용하는가가 중요합니다.
그리고 무엇보다도 먼저........
여러분은 지금 프로그래밍의 환상에 사로잡혀있지만,
결국 10년 후면 여러분은 그 때는 프로그래밍의 세계에서 떠나야한다는 것입니다.
전부다 한때의 불나방인 것을.........

익명 사용자의 이미지

그런 소리는 10년 전에도 들었수다.

스카리의 이미지

멋지십니다 :-)

저도 10년후에 님과 같은 말을 할 수 있기를...

익명 사용자의 이미지

얼뜻 보기에 느린데..

뭐가 빠르당가

익명 사용자의 이미지

아.. 뭐... Hello world 만 찍을 줄 알면 그렇게 느끼겠습니다만은...

익명 사용자의 이미지

이런 토론 정말 불필요하다는 거, 다들 알고 계시지 않나요?

자바가 빠르건, C++이 빠르건,

현대적인 언어의 관점에서

절대적, 상대적 속도 비교 자체가 무의미 하다는 건,

이제 다들 알고 있지 않습니까?

물론 얼마만큼의 성능이 나와야 하는지 중요합니다.

하지만 그 성능의 관점은 속도가 아니라,

모든면에서 종합되어야 한다는 거 다들 알고 계시잖아요...

이건 사견입니다만...,

kldp에 오시는 linux kid 분들은 비즈니스적인

면에서 약간 경직되어 있지 않나 싶네요

익명 사용자의 이미지

하나 더 붙이자면, 네트웍 서버를 만들던, gui 클라이언트를 만들던

잘 짜여진 구조와, 유연하고 우아한 코드보다 중요한게 있을 수 없지요.

익명 사용자의 이미지

일반적인 application이야 그렇겠지만 time-critical한 system program의

경우에는 안그렇잖아요..

특히 embedded분야에선 말이죠..

익명 사용자의 이미지

이런 멍청이들은 10년 전에도 있었다니까..

익명 사용자의 이미지

아무나 빨라라...씨댕

익명 사용자의 이미지

명언입니다 :-)

익명 사용자의 이미지

C++과 JAVA와 비교하는것이라면 모르겠지만, C/C++과 JAVA 비교라... 어딘가 촛점이 어긋난듯한 느낌이 듭니다.

익명 사용자의 이미지

글쎄요, 객체지향으로 인한 오버헤드의 차이는
자바나 C++이나 마찬가지라고 생각합니다.

그러나 C++은 자바가 가지지 못한 엄청난 성능향상 방법인 inlining(인라이닝) 기술이 있습니다. 인라인 기능을 잘 쓰면 엄청난 속도 향상을 얻을 수 있습니다. 대표적인 예가 ANSI C++의 STL이지요.

엄청나게 오래 걸리는 컴파일 시간을 투자한 STL 프로그램의 성능 향상은 실로 놀랍습니다.
"C++이 C보다 훨씬 빠르다!"라는 것이죠.
실험에 따르면(출처: Effective STL)
C++의 sort()가 C의 qsort()보다 무려 "67000"배나 빨랐습니다.
qsort()가 함수 포인터에 의해 매번 비교 함수를 호출해야하는 오버헤드가 있는 반면에,
sort()는 컴파일 타임에 코드가 조립되어서
전혀 함수 호출이 필요없게 되어 버리는 것이죠.

이러한 템플릿과 inlining 메커니즘이 없는 자바는 코딩을 통한 최적화에 한계를 보일 수 밖에는 없습니다.

익명 사용자의 이미지

C 보다. 훨 낫다구요..??

그럼.. 왜.. 운영체제를.. C++ 로 만들지 않는 것이죠..??

속도나.. 안정성이 생명인 .. 운영체제 아닙니까...??

어디선가.. 들었는데.. C++ 로 포팅했다가.. 다시 돌아 왔다구.. 하던데..??

어떤 이유 에서 일까요..??

익명 사용자의 이미지

C++로 만들어진 운영체제로 대표적인 게 BeOS 입니다.
즉, 프로그래머가 접근할 수 있는 최저 레벨의 API가
도스는 인터럽트(어셈블리), 윈도는 WIN32 API(C), 유닉스는 시스템콜(C)인
반면에, BeOS는 클래스 라이브러리입니다.

BeOS 한 번 깔아보시분은 아시겠지만, 속도가 엄청나게 빠르지요.
제 구형 셀러론 시스템에서도 부팅속도가 5초 정도 밖에 안되었고,
모든 작업에서도 상당히 반응속도가 빨랐습니다.
무거워 터진 Win2000/XP나 X-Windows에 비하면, 거의 날아다닌다는 느낌.
안정성면에서도 블루스크린을 수시로 내놓는 윈도와, 세그멘테이션 폴트를
내며 자주 죽어버리는 KDE나 GNOME에 비해서 훨씬 안정적입니다.

이렇게 좋은 OS가 지금은 Palm에 팔려서 사장된 것이 너무 아쉽게 느껴집니다.

하여튼 C++로도 C보다 훨씬 빠르고 안정적인 운영체제를 만들 수 있다는 것이죠!

익명 사용자의 이미지

구글 검색해 보니 6월 17일 일자로 BeOS Personal Edition 5 가 나오네요.

http://www.bebits.com/app/2680

익명 사용자의 이미지

죄송. 대충읽어서... 삽질했네요.

익명 사용자의 이미지

일반적으로 OOP를 사용하게 되면 개체 생성과 virtual function table을 통한 함수 호출 등에 걸리는 overhead 등으로 속도가 떨어지게 마련입니다.

하지만, C++의 경우는 어떤 새로운 특징들이 언어에 추가될 때 항상 효율성을 해치지 않는 쪽으로 언어 설계가 이루어졌기 때문에 프로그래머가 잘 만 한다면 이런 overhead를 피할 수 있는 방법이 존재한다는 것이 Java에 비해 다른 점이라고 생각합니다. 때에 따라서는 C에 없는 특징들을 잘 사용하게 되면 C보다 더 좋은 성능을 얻을 수도 있죠. (위의 qsort가 이것의 단적인 예라고 생각합니다.)

전 운영체제에 C++을 사용하지 않고 있는 것이 효율성의 문제라기 보단 다음과 같은 이유들 때문이라고 생각합니다.

첫째, 컴파일러를 만들기 어렵다.
C++ compiler는 여러 가지 다양한 프로그래밍 패러다임을 지원하기 때문에 - 특히 template 때문에 - 컴파일러를 만들기 어렵기로 유명합니다. 현재 VC++도 C++ 표준을 완전히 지원하지 못하고 있는 형편인데, embedded system 용의 컴파일러가 그러길 바란다는 건 무리겠죠.

둘째, 다양한 개발환경간 코드 공유/호환이 힘들다.
C++에선 함수 overloading 특징들로 인해서 함수 이름들을 name mangling 하게 됩니다. 근데 이 방법이 컴파일러마다 다르기 때문에 컴파일러 간 코드 공유/호환이 잘 안됩니다. 여러 다양한 언어/컴파일러 들에게 널리 사용될 수 있는 API를 제공해야하는 운영체제의 입장으로서 이런 점은 C++을 사용하는데 큰 문제가 될 수 있겠죠.

이상 제 나름 대로의 생각이었이구요 다른 분들은 또 어떻게 생각하시는지 궁금합네요 ^^

익명 사용자의 이미지

gcc 에 보면
모든 inline 인것 처럼 컴파일을 하게 하는 옵션이 있습니다.
이걸 썼을 때에도 c 가 c++ 보다 느려질 것 같지는 않을 것이라고 봅니다.

cedar_의 이미지

컴파일러가 모든 경우를 인라이닝 할 수는 없습니다.
함수의 인자로 함수 포인터가 넘겨지는 경우에는
실제로 그 함수의 주소 값이 있어야 합니다.
그래서 컴파일러는 이 경우에는 인라이닝을 할 수 없습니다.

그래서 ANSI C++ STL에서 이런 문제점을 해결하기 위해 만든 것이
함수 포인터를 대신하는 함수 객체(function object)입니다.
함수 객체란 멤버 함수로 함수 하나만 들어 있는 매우 간단한 클래스입니다.
클래스이기 때문에 당연히 인라이닝할 수 있지요.

STL의 sort가 C의 qsort보다 65000배 빠른 이유도 이 함수 객체 때문입니다.
함수 포인터는 이제 구시대의 유물로 사라질 때가 된듯... ^^

cedar_의 이미지

오타: 65000배가 아니고 67000배입니다.

익명 사용자의 이미지

답장이 잘못 달렸네요. -_-;;
아래 자바와 C++의 속도를 견줄 수 있지 않겠느냐는 의견에 대한 답글입니다.

익명 사용자의 이미지

자바가 최적화된 상태에서 최적화되지 않은 상태의 c/c++을 비교한 것 같습니다.

아~~~ 그리고 자바에 최적화된 자바용 프로세서가 있는데, 그거라면 또 달라지지요.

보통 일반적으로 자바는 c/c++을 따라올수가 없습니다.

님의 말은 즉 c/c++이 어셈블리보다 빠르다는 이야기와 동격입니다.

익명 사용자의 이미지

몇몇 플랫폼 - 몇몇이라고 하기엔 너무 많이 쓰는 플랫폼이지만 -

ibm with aix(특히 rs6000 이상의),

썬의 엔터프라이즈 기종들에서는 모든면에서 C++ 보다, 자바가 빠릅니다.

물론 특화된 컴파일러를 사용한다면 - 이거야 말로 특별한 경우지만... -

C++ 이 빠를 수 있지만, 여러분들이 많이 사용하시는 GNU 툴들을

사용할 경우 입니다., 비공개 자료라 딱히 공개할 수가 없는 게 유감이네요..

낮은 용량의 서버는 보통 써봐야 PC 서버 정도이니까,

C++ 보다 일부분에서 약간 느린건 어쩔수 없죠..

익명 사용자의 이미지

C 라면 모르지만 C++ 이라면 견주어 볼 수 있을 것 같습니다. 객체지향에 따른 오버헤드가 많고, 자바보다 복잡한 메카니즘(다중상속 등)을 지원하기 때문에 C++ 이라면 충분히 겨루어볼 수 있을것이라고 생각합니다.

익명 사용자의 이미지

이광 wrote...
> 요는 "자바는 느리다고 주장하는 것이 최악이다. 현재 사용되고 있는 JIT 컴파일러는 탁월하다. 벤치마크 결과 C와 C++ 코드를 앞섰다. 사용자가 사용하고 있는 칩셋을 정확히 알고 있기 때문에 일반적인 최적화가 아닌 칩셋에 맞는 최적화를 할 수 있다. 정적인 컴파일러는 프로그램에서 무엇을 수행하는지 알지 못한다." 라는 말인데 정말 맞는 건지 궁금해 집니다.

현 시점에서 최적화된 C 컴파일러보다 빠르다는 말이 갖는 의미는 "이보다 더 최적화 되기는 힘들다" 라는 의미와 일맥상통한다고 봅니다. 개인적으로 자바가 아직까지는 그러한 수준에 도달하지 못했다고 생각합니다만, C++ 과 비교한다면 꽤 근접한 수준에 도달한 것 같습니다.

몇몇 보고서에서 Java 로 초당 10000 개 이상의 트랜잭션을 처리할 수 있었다고 하는 것으로 보아, 네트웍 분야에서도 가능성은 충분히 있다고 봅니다.

다만 정적인 컴파일이 아닌 동적 컴파일이 이루어지기 때문에 로딩 시간이 오래 걸리고, 많은 메모리를 요구하는 것은 필요악이겠죠.

익명 사용자의 이미지

펀글들을 적당히 정리해서 올려봅니다.
=====================================

JIT 컴파일러에 의한 최적화가 C++보다 앞선다?
가능한 얘기입니다.
다만. 전제조건이 메모리가 엄청나게 많아야 한다는 겁니다. 중간코드를 다시 컴파일 할려면 기존의 응용프로그램이 메모리에 모두 올라가야 되구요. (이럴경우 Lock에 대해서도 궁금한데... 누구 아시는 분 설명좀 부탁드립니다.)
또다른 문제점은 반드시 처음 실행할때는 다소 느리다는 거죠. 왜냐구요?
profile을 할려면 최소한 한번은 실행을 해야 하걸랑요.
프로그램이 실행이 되어야 성능을 체크하죠. 게다가 각종 리소스를 메모리로 가져와야 하는데.

제 생각은 PC들이 모두 메모리 1기가 이상은 되어야 가능한 얘기입니다.

고슬링의 이번 인터뷰도, 썬이 C/C++ 진영을 공략하기 위해 써던 전략의
재탕입니다. 자바 코드가 C++ 코드와 같거나 조금 더 빠르다고 주장하기를 매번 업데이트마다
계속했었지요. 그래서 어떻게 됐습니까.

JBuilder와 같이 절대적으로 pure 자바를 지향하는 경우 외에는, 데스크탑 솔루션은 자바로 만드는
경우는 거의 없습니다. 대표적인 경우가 넷스케이프 브라우저로, 넷스케이프에서는 몇년전에 이넘을
자바로 포팅하려는 야심찬 프로젝트를 하다가 포기한 바 있습니다.

개발자들은 대체로 좀 꼼꼼하다보니, 특정 연산에서 빠르다 아니다에 영향을 많이 받는데요.
그러다보니 나무만 보고 숲은 못보는 경우가 허다합니다. 특정 연산에서 빠를 수도 있습니다.
IT 기술이 발전하는 거니까 당연한 거지요. 하지만 자바의 경우 데스크탑에서 분명히 실패했습니다.

자바가 일반 데스크탑이 아닌 모바일이나 엔터프라이즈에서 특히 각광받는 것은 당연한 것입니다.
원래 자바는 모바일(정확하게는 가전제품)에서 사용되기 위해 설계된 것이었고, 또한 엔터프라이즈
레벨에서는 최악의 경우 대수를 늘리거나 사양을 높임으로써 하드웨어 비용을 높이는 대신 개발
비용을 낮추는 방법으로 공략이 가능했기 때문입니다. 일반 데스크탑 사용자들에게 당장 512MB로
메모리를 증설하고 CPU를 2G로 업그레이드하라는 것은 대단히 어려운 일이지만, 서버를 구축하면서
1GB쯤 메모리와 최신 제온 프로세서를 증설하거나 아예 서버 한대쯤 더 놓는 것은 쉬운 일이니까요.

자바나 C#이 데스크탑에서 위력을 발휘하는 것은 가까운 시일이 되지는 못할 겁니다.
우리나라에서야 PC에 메모리 하나 더 꽂는 것을 연례행사 정도로 여기고 있지만 미국이나 다른 나라들은
우리나라보다 업그레이드에 좀 더 보수적이니까요.
자바나 C#이 데스크탑에서 C++의 강력한 경쟁자가 되기 시작하는 것은 아주 빨라도 5년 정도는 걸리거나,
혹은 거의 불가능할 수도 있습니다.

익명 사용자의 이미지

한가지 더... 혹시 이클립스를 써보셨나요? SWT라는 그래픽 툴킷을 사용하는데 사실상 네이티브 어플리케이션이나 마찬가지 입니다.

아직 자바가 데스크탑 시장에서 좋은 반응을 얻고 있지는 않지만 가능성은 많습니다. 네이티브 컴파일러, SWT, JDK 1.5에서의 공유 VM 같은 기능들...

제 생각에는 IT업계는 5년이 아니라 6개월 앞을 보기도 어려운 것 같군요 :)

익명 사용자의 이미지

데스크탑은 조금 문제가 다릅니다. 자바가 빠르다는 건 GUI를 사용하지 않았을 때 이야기 입니다.

하지만, 스윙으로 네이티브 GUI 프로그램의 속도를 따라잡을 수는 없지만 하드웨어 사양이 올라가면서 사용자가 그 차이를 느끼지 못할 수는 있습니다. 사실 지금도 좋은 사양의 컴퓨터에서는 스윙 어플리케이션이 결코 느리게 느껴지지 않습니다. JVM 로딩시간이 문제인데 이는 1.5 버전 대에서 어느정도 해결될 것으로 생각합니다.

익명 사용자의 이미지

JIT 같은 경우 런타임시 컴파일 되어 실행속도를
향상시키는 기술로 알고 있습니다. 지금은 HOTSPOT을
쓰죠.

칩셋에 맞춰 컴파일한다는 소리는 런타임시 JIT이나 Hotspot으로 기계어로 변환해서 수행속도를 높인다는 소리일겁니다.

자바칩 같은 것도 이야기 들었는데 실재로 쓰는 곳은 못봤구요.

익명 사용자의 이미지

확실한 정보는 아닌데요, 군수품 그러니까 군장비 제어용으로 자바칩을 사용한다고 들었습니다.미국에서는 ADA를 사용하지만 유럽쪽에서는 자바를 쓴다는것 같은데...

익명 사용자의 이미지

그렇게 칩셋에 맞춰서 컴파일한다면 그게 자바일런지. 자바는 어느곳에서다 똑같이 실행되는것이 자바의 특성아니였는지...

익명 사용자의 이미지

JIT의 개념은 개발자가 칩셋에 맞게 컴파일한다는게 아니라, 개발자는 자바 컴파일러로 자바 바이트 코드를 만들어내고, JIT는 런타임에 이를 시스템에 최적화된 코드로 다시 컴파일한다는 뜻입니다.Anonymous

익명 사용자의 이미지

자바가 어디서나 실행된다고 VM도 모든 기계에서 실행되는 것은 아니져

같은 맥락에서 보시면 됩니다.

그리고 VM이 어떤 방식을 사용하던지...자바가 돌아가는 것은 같습니다...

JIT컴파일러가 있는 VM이랑 없는 VM이랑 같은 코드가 다르게 실행되는것은

아니자나요...

페이지