Java szybsza od C++? Tjaa…

Ostatnio na wykładzie z Javy profesor rzucił zdanie dające jasno do zrozumienia, że uważa że Java potrafi być szybsza od C++.

Czy ktoś może mi wytłumaczyć skąd bierze się takie dziwne przekonanie? Jak coś co jest interpretowane może być szybsze niż kod natywny? Najwięcej radości sprawiłoby mi gdyby przyszedł tutaj, ktoś kto twierdzi, że Java jest szybsza i mi to udowodnił. Dla mnie to nie do pojęcia…

Na początek dam coś takiego: http://www.jelovic.com/articles/why_java_is_slow.htm

Reklamy

19 myśli nt. „Java szybsza od C++? Tjaa…

  1. W zastosowaniach biznesowych odpowiedz na to pytanie nikogo nie obchodzi. Liczy sie jezyk, w ktorym mozna cos szybko napisac, a pozniej znajda sie ludzie gotowi to rozwijac. I zgadza sie, wybor padnie na Jave (ewentualnie C#). Czy slusznie? A kogo to obchodzi? Ma dzialac i dziala. Najwyzej dolozy sie RAM-u (i wyjdzie taniej).

    Czy takie podejscie jest sluszne? Nie jestem jego zwolennikiem, ale takie sa realia, zatem dywagacje na temat co jest szybsze zostawiam srodowiskom akademickim 🙂

  2. No właśnie, jak profesor takie coś powiedział to cała sala miała wyraz twarzy mówiący coś w stylu „WTF?” :p

    Ale faktem jest Java działa dziś szybciej niż działała kiedyś. To pocieszające jednak jak widać niektórzy się zagalopowali w zachwycie 😉

  3. Niestety. Jest to powszechne zwłaszcza wśród pracowników akademickich. Dlatego nie chodzę na wykłady, bo nie chce mi się non-stop wchodzić w dziwne dyskusje 🙂 Są statystyki pokazujące że Java, C# mogą być szybsze (lub przynajmniej porównywalne) od C++, ale tylko w zakresie funkcjonalności języka która w C++ nie jest wspierana natywnie, a jest w wymienionych językach (czyli np. jakieś operacje na kolekcjach). Dobry kod interpretowany zawsze będzie wolniejszy od dobrego kodu natywnego. Jednak właśnie tu jest miejsce, które może sprawić, że warunek o którym mówi profesor jest prawdziwy. Bo jeśli kod w Javie zostanie napisany świetnie, a w C++ beznadziejnie… to cóż 🙂

  4. Oczywiście, że „rozgrzana” Java może być nawet dużo szybsza od C++. C++ po komplikacji już nic więcej nie może zrobić ze swym kodem. A JVM zaś może i to spor. W miarę upływu czasu, Java się „rozgrzewa” i przyśpiesza ucząc się jak agresywnie zoptymalizować już działający kod w pamięci. Inna sprawa, że Java ma dużo wydajniejsze zarządzanie obiektami. http://kano.net/javabench/, http://www.oreillynet.com/xml/blog/2006/01/native_code_no_longer_any_fast.html

  5. Jeśli chodzi o „rozgrzewanie” Javy to nie słyszałem o tym i przyznam, że pomysł jest ciekawy. Daleki jestem jednak od uznania, że Java może być szybsza – a tym bardziej dużo szybsza… Nie spotkałem się jeszcze z takim przykładem.

    Jeśli chodzi o „wydajniejsze zarządzanie obiektami” w Javie to jest to co najmniej interesujące… Jest wydajniejsze od czego? Nie pamiętam aby w C++ było jakiekolwiek zarządzanie obiektami jeśli nie napisze się go samemu 😉 Wówczas mówienie, autorowi że pisze kod wolniejszy niż Java to jak besztanie go z błotem 😛

    No ale powagi: ostatnio trochę oglądałem testów i innych rzeczy i nigdzie nie spotkałem takiego, który dałby wynik korzystny dla Javy względem C++.

    Faktem jest natomiast, że Java jest chyba najszybszym znanym mi do tej pory językiem skryptowym. Należą się jej brawa ^^

  6. Prawdę mówiąc bardzo bym chciał aby Java była szybsza. To byłby powód żeby porzucić ascetyczne C/C++. Problem w tym, że nikomu nie udało się mnie do tego przekonać 😉

  7. @moriturius: a ty w ogóle odróżniasz Javę od Javascriptu? Jak można nie wiedzieć o javowej agresywnej kompilacji online używanej w JVM? Słwoo JIT nic ci nie mówi?

    Nie rozumiem dlaczego piszesz, że nigdzie nie widziałeś, żadnego testu w którym Java jest szybsza od C++, skoro podałem ci dwa linki. Jak ci mało, to zobacz te:

    http://scribblethink.org/Computer/javaCbenchmark.html

    http://trs-new.jpl.nasa.gov/dspace/bitstream/2014/18351/1/99-1827.pdf

  8. Buahahaha! Dopiero teraz zobaczyłem, że kolega faktycznie nie odróżnia JavaScriptiu od Javy „Faktem jest natomiast, że Java jest chyba najszybszym znanym mi do tej pory językiem skryptowym.” Po prostu wstyd i kompromitacja. Tu jest nowszy benchmark, ktory wczesniej podano, i nie bylo komentarza http://www.stefankrause.net/wp/?p=6. Pewnie JDK7 bedzie jeszcze szybsze.

  9. moriturius, ten wykladowca uzyl takie stwierdzenia nie bez powodu, sa na to dowody – hipertracker wkleil dobry link. podejrzewam,ze wykladowca teraz siedzi i smieje sie z takich jak Wy, ktorzy nie trybicie.

  10. Wlasciwie rzeczywiscie. Wycofuje sie z tego ze Java to język skryptowy 😉 Chociaż powiedzieć, że to język programowania też nie chcę. Powinna powstać jakaś nowa klasa języków. np. języki bajtkodowe ^^

    „Jak można nie wiedzieć o javowej agresywnej kompilacji online używanej w JVM? Słwoo JIT nic ci nie mówi?”

    Erm… niespecjalnie. W Javie zacząłem programować dopiero 3 tygodnie temu ponieważ zaczęły mi się z tego zajęcia. W linkach, które podałeś rzeczywiście wygląda to jakby Java potrafiła być szybsza.

    Zastanawiam się jednak czy dla programów o ogromnej liczbie klas i obiektów i jeszcze jakimiś oknami i innymi śmieciami poradzi sobie lepiej.

    BTW.: zna ktoś grę (2D lub 3D) w całości napisaną w Javie? Skoro Java jest taka szybka i cudowna to dlaczego programiści zostają przy C/C++ skoro Java zapewnia dodatkowo przenośność pomiędzy platformami co działa na duży plus dla gry? (Nie wspominając oczywiście o wygodzie)

  11. moriturius, masz elementarne braki. C/C++ mają trochę inny zakres zastosowań. Są bardziej niskopoziomowe, mają bezpośredni dostęp do warstwy sprzętu, sterowników, przerwań itp. Java jest izolowana od tej warstwy przez wirtualna maszynę, i jest bardziej nastawiona na zastosowania serwerowe, sieciowe oraz oczywiście multiplatfomowość.

  12. hipertracker: Płacą Ci za obrażanie mnie? W dzisiejszych czasach żaden system operacyjny nie pozwoli na bezpośredni dostęp zwykłego programu do sprzętu. Wszystko trzeba robić przy pomocy API systemowego danego OSa.

  13. To niech mi ktos wytlumaczy, dlaczego problem n-krolowych realizowany za pomoca algorytmu z nawrotami, dla n=14(wszystkie mozliwe rozwiazania) wykonuje sie w c++ w ciagu 40 sekund a w javie w ciagu 7 sekund? Dodam ze to jest dokladnie ten sam kod.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s