Skocz do zawartości
kfgz

Java Vs C

Rekomendowane odpowiedzi

Witam,

 

Dużo osób twierdzi, że aplikacje pisane w Javie działają wolno. Pewnie mają rację ale czy zawsze? Postanowiłem to sprawdzić doświadczalnie porównując dwie identyczne aplikacje do znajdowania liczb pierwszych. Jedną napisałem w C, a drugą w Javie. Oczywiście test nie jest do końca miarodajny ze względu na prostotę użytego kodu :/

 

Java:

public class prime { static int Liczba, Licznik = 1, d = 3, g = 20000000, Krok = 2, Dzielnik; public static void main(String[] args) {     for (Liczba = d; Liczba <= g; Liczba += Krok) {	 Dzielnik = 3;	 while ((Dzielnik * Dzielnik <= Liczba) & (Liczba % Dzielnik > 0)) Dzielnik += Krok;	 if (Dzielnik * Dzielnik > Liczba) Licznik++;   }     }  }

C:

int main() {    unsigned int Liczba, Licznik = 1, d = 3, g = 20000000, Krok = 2, Dzielnik;   for (Liczba = d; Liczba <= g; Liczba += Krok) {	 Dzielnik = 3;	 while (Dzielnik * Dzielnik <= Liczba && Liczba % Dzielnik) Dzielnik += Krok; 	 if (Dzielnik * Dzielnik > Liczba) Licznik++;   }   return 0;    }

Czasy wykonywania aplikacji na AXP1700+ (win xp + sp2):

 

C - 87 sekund

Java (vm) - 90 sekund

Java (gcj - exec) - 105 sekund

 

Trochę się zdziwiłem, że aplikacja w wirtualnej maszynie wykonywana jest szybciej od aplikacji skompilowanej do kodu maszynowego (gcj). Po cichu liczyłem, że będzie odwrotnie, a tu zonk. Kod w C kompilowałem w GCC 3.4.2. bez żadnych optymalizacji.

 

 

EDIT:

 

Kod w javie kompilowałem w jdk 1.5.0 update 9, a uruchamiałem na 1.6.0.

Edytowane przez Dj_AnT

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A teraz wyobraźcie sobie taki program P2P, który tworzy jednoczesnie kilka/kilkanaście/kilkadziesiąt połączeć TCP/IP i jednocześnie wysyła i odbiera różne fragmenty pliku mającego nawet 4GB i więcej. Czy nadal chcecie pisać programy w Javie? ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

przedstawiłeś algorytm, który jest krótki i ciągle powtarza jeden kawałek kodu... Porównaj sobie lepiej środowisko graficzne napisane w Javuni z takim napisanym w C/C++... Programy napisane w javie od razu poznać po tym, że dziewnie się odrysowują okienka na ekranie :).. dziwnie powoli...

Edytowane przez PelzaK

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Trochę się zdziwiłem, że aplikacja w wirtualnej maszynie wykonywana jest szybciej od aplikacji skompilowanej do kodu maszynowego (gcj). Po cichu liczyłem, że będzie odwrotnie, a tu zonk. Kod w C kompilowałem w GCC 3.4.2. bez żadnych optymalizacji.EDIT:

 

Kod w javie kompilowałem w jdk 1.5.0 update 9, a uruchamiałem na 1.6.0.

Testowanie kodu bez optymalizacji nie ma wielkiego sensu, liczy się szybkość gotowego programu, który jest kompilowany z optymalizacjami.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ale panowie, nie ma sie co sprzeczac o to, wiadomo Java jest wolniejsza nic C/C++.

 

@PelzaK

Mi tam bardzo przyjemnie pisze sie w NetBeans i Eclipse, fakt sa wolniejsze niz srodowiska napisane w C++, ale nie tak, zeby psuc przyjemnosc z korzystania z nich (a sa bardzo przyjemne).

 

@ULISSES

Prosze nie powtarzaj tu stereotypu, ze Java do niczego sie nie nadaje i jest o kand d..y potłuc, tylko dlatego, ze jest wolniejsza od C, siła Javy to przede wszystkim Java EE czyli to co stoi po stronie serwera. Cale Java EE ma ogromne uznanie na swiecie i pisze sie w tym bardzo powazne i rozbudowane systemy enterprise.

 

 

EDIT:

Poprawiony nick, sorry.

Edytowane przez thuGG

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Testowanie kodu bez optymalizacji nie ma wielkiego sensu, liczy się szybkość gotowego programu, który jest kompilowany z optymalizacjami.

Po dodaniu optymalizacji w gcc (-O3), czas wykonywania kodu skrócił się do 70 sekund. Edytowane przez Dj_AnT

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

przedstawiłeś algorytm, który jest krótki i ciągle powtarza jeden kawałek kodu... Porównaj sobie lepiej środowisko graficzne napisane w Javuni z takim napisanym w C/C++... Programy napisane w javie od razu poznać po tym, że dziewnie się odrysowują okienka na ekranie :).. dziwnie powoli...

nie baredzo jest co porownywac gdyz C nie oferuje tak dobrej biblioteki gui jak Swing - porownywanie tez nie ma sensu gdyz wlasnie wieloplatformowosc ma tu duze zanczenie - to jakby porownywac ciezarowke z dragsterem bo i to i to samochod...

 

Porownywanie na prostych algorytmach ma ten plus ze tu wieloplatformowosc javy gra o wiele mniejsza role...

 

EDIT : tak dobrze napisalem :P Java ma o wiele lepsze narzedzia do tworzenia GUI niz C :P

Edytowane przez Yacho

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Java była pisana z myślą o środowisku uruchomieni owym, czyli w jej przypadku wirtualnej maszynie Javy. Nie ma najmniejszych szans, żeby była szybsza od jakiegokolwiek języka kompilowanego. Natomiast pozostaje pytanie o ile jest wolniejsza np. od C/C++, czy przy normalny użytkowaniu oprogramowania jest to uciążliwa różnica? Nie mówię tutaj o aplikacjach przetwarzających jakieś skomplikowane algorytmy obliczeniowe, a o różnego rodzaju programach wykorzystujących Swing. Moim zdaniem różnica nie jest dla większości użytkowników posiadających przeciętnie wydajne komputery zauważalna, a niektóre aplikacje napisane w Javie są po prostu ładne, wygodne i można je uruchomić zarówno pod Windowsem jak i Linuxem, co dla niektórych jest zdecydowanym plusem.

Poza tym jest po prostu potężnym językiem, posiadającym standardowo sporo gotowych bibliotek, a pracuje się z nim bardzo przyjemnie. Ja osobiście korzystam z NetBeans pod Linuxem i na prawdę nie narzekam na jego wydajność, a jest to moje ulubione IDE do programowania.

Dzięki Javie można pisać potężne oprogramowanie integrujące zarówno aplikacje przetwarzane po stronie serwera jaki i te uruchamiane po stronie klienta itd. Dużo można by się tutaj rozwodzić.

Moim zdaniem porównywanie Javy z C, a przede wszystkim z C++ nie ma sensu. Wiadomo nikt nie będzie pisał oprogramowania np. na potrzeby automatyki w Javie, ale może spokojnie, szybko napisać jakaś aplikację z rozbudowanym GUI.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiadomo nikt nie będzie pisał oprogramowania np. na potrzeby automatyki w Javie, ale może spokojnie, szybko napisać jakaś aplikację z rozbudowanym GUI.

SAP twierdzi inaczej SAP dla przemysłu

 

Javy zgodnie z instrukcją suna nie należy używać do : oprogramowania elektrowni atomowych i systemów czasu rzeczywistego .

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...