Informacja nieprawdziwa, jest to w >90% czas uruchomienia maszyny wirtualnej Javy wraz z załadowaniem wszystkich bibliotek, dopiero potem jest interpretacja kodu bajtowego co powinno się liczyć jako czas właściwy.
Zresztą Java ma dużo poważniejsze zastosowania (JEE) niż jakieś Hello Worldy.
@akwes: Zrobili ten błąd, że zbadali czas uruchamiania się maszyny wirtualnej, i dla osoby nieznającej się na programowaniu będzie to wyglądało tak, jakby wszystkie operacje w Javie były kilkadziesiąt razy wolniejsze niż w C++, co jest nieprawdą.
Gdyby zrobić bardziej złożony test, który nie wymagałby ponownego uruchomienia programu (choćby 10000 wypisać w pętli Hello World), wtedy stosunek czasu Javy do C byłby znacznie niższy, choć nadal większy niż 1.
@akwes: Wolniej się wykona bo dłużej będzie ładować biblioteki. W hello wordzie czy małych programach widać różnicę, ale w większych już nie bardzo. A C++ nie jest napisany od nowa, tylko rozszerzony C o obiekty i inne takie. To, że troszkę dłużej będą się ładować biblioteki czy więcej zajmują w pamięci nie oznacza, że jest gorszy.
@akwes: Problem jest w iostreams, które są znacznie wolniejsze od stdio w C. W którymś konkursie było zakazane korzystać z nich ze względu na wielką dyskryminację tak uruchamianych programów (pomimo, że algorytm mógł być tak dobry jak w C to programy wykonywały się 2-3x wolniej). Podobno w najnowszych wersjach bibliotek zostało to naprawione, ale nadal strumienie są powolne.
@matix32: W "Hello World" pewnie tak, ale w wielu bardziej skomplikowanych programach umiejętności programisty do zapanowania nad kodem assemblera mogą okazać się niższe od wystudiowanych i dopieszczonych przez lata mechanizmów kompilatora C.
O co chodzi z czasem C? To jest czas kompilacji? Czas odpalenia skompilowanego programu (który i tak zależy od kompilatora, a ściślej od bibliotek)? Nic nie rozumiem.
Ok, zgodzę się. Badanie nie jest miarodajne - bo jeszcze liczymy odpalenie maszynki wirtualnej.
Nie zmienia to faktu, że Java bywa wolna.
Korzystał ktoś z Was przy Javie z mavena? To wygodne narzędzie, ale bywa koszmarnie wolne. Kiedyś musiałam tworzyć większe projekty, załączać trochę zewnętrznych bibliotek i wspomagałam się mavenem.
W końcowych fazach projektu bywało tak, że odpalałam kompilację, przeleciała piosenka na playliście, patrzę.. maven dalej zapodaje.. wstawiłam wodę na kawę, wracam
To nie jest test porównujący czasy wykonania programu, gdyż operacja wyjścia zależy w głównej mierze od systemu operacyjnego i bibliotek. Najlepszym testem porównawczym może być np. wykonanie mnożenia dwóch liczba milion razy.
Komentarze (79)
najlepsze
-Kto tam?
[Mija 10 minut]
-Java!
Puk puk.
- Kto tam
Zresztą Java ma dużo poważniejsze zastosowania (JEE) niż jakieś Hello Worldy.
Tutaj poważniejsze porównania:
http://keithlea.com/javabench/graph
Kiedyś a teraz, to nie ma porównania.
Java nie będzie specjalnie szybsza od C++, z racji swojej natury, i przede wszystkim przez maszynę
Gdyby zrobić bardziej złożony test, który nie wymagałby ponownego uruchomienia programu (choćby 10000 wypisać w pętli Hello World), wtedy stosunek czasu Javy do C byłby znacznie niższy, choć nadal większy niż 1.
Ogólnie
To jest czas startu programu i środowiska wykonawczego + czas wykonania + czas zamknięcia programu.
Ponieważ program w C polegał jedynie na systemie operacyjnym, wystartował prawie od razu.
Program
Nie zmienia to faktu, że Java bywa wolna.
Korzystał ktoś z Was przy Javie z mavena? To wygodne narzędzie, ale bywa koszmarnie wolne. Kiedyś musiałam tworzyć większe projekty, załączać trochę zewnętrznych bibliotek i wspomagałam się mavenem.
W końcowych fazach projektu bywało tak, że odpalałam kompilację, przeleciała piosenka na playliście, patrzę.. maven dalej zapodaje.. wstawiłam wodę na kawę, wracam