Portál AbcLinuxu, 30. dubna 2025 20:17
Odpůrci Javy velice často používají argument, že Java je "příšerně pomalá". Léta proti tomuto nařčení bojuji, ale nikdy jsem za tu dobu nezměřil, jak to ve skutečnosti je (publikované studie jsou jednou tak a jednou onak - podle toho, co chce ten který autor zrovna prokázat). Až nyní...
...došlo ke změně. Nedávnou jsem opět musel vyvracet nějakému obzvášť zatvrzelému antijavistovi, že to rozhodně není tak zlé, jak si myslí. Tak mě hned napadlo, že by nebylo od věci si změřit, jak na tom Java (ve srovnání s C) je.
Nepouštěl jsem se do žádných složitých benchmarků. Jen jsem vzal tři velmi jednoduché úlohy, které se dají velice snadno (a současně téměř identicky) realizovat jak v C, tak v Javě. V každém z jazyků to bylo jen pár řádků kódu.
Ještě důležitá informace - podmínky měření (konfigurace stroje): Celeron 1700, 512 MB RAM, deska MSI 648 Max, HDD Hitachi 120 GB 7200 ot./min. 8 MB cache; Fedora Core 3 (v plně aktualizovaném stavu), Java 5.0 (JDK 1.5.0). Měření času probíhalo pomocí programu time
(tj. externě) na počítači bez další zátěže, uvádím vždy aritmetický průměr 3 naměřených časů. Java byla spouštěna v základní konfiguraci (tj. bez parametrů).
Co z toho vyplývá? Že Java není vůbec pomalá, může sice být někdy pomalejší, ale jindy je naopak rychlejší. Navíc, rozsáhlé standardní knihovny umožňují snadno efektivně programovat věci, pro které musíme mít v C externí knihovny nebo psát hromady kódu (viz spojování řetězců). Samozřejmě, věci jako GUI Swing pomalé jsou, ale to už vyplývá z jejich filosofie, kterou je prakticky plná přenositelnost - a je to prostě daň, která se za to platí.
Koho by zajímalo, jak přesně vypadaly testovací prográmky, může si je stáhnout a vyzkoušet.
Tiskni
Sdílej:
Uvedl bych jen jeden ilustrativní příklad. Nedávno mi jeden kolega tvrdil, že systém pod vmware by při dostatku paměti měl běžet asi na 97 procent rychlosti nativního systému na témže počítači. Moc se mi to nezdálo, ale ono záleží na úhlu pohledu. Rychlost procesoru, měřená pomocí openssl, byla skutečně jen neznatelně nižší než u nativního systému. Totéž platilo i pro rychlost disku nebo rychlost přenosu dat po síti. Jenže… na počítači, na kterém kompletní instalace systému (přes AutoYaST, takže lidský faktor nehrál roli) trvala 20-25 minut (podle přesné konfigurace), trvala stejná instalace do vmware 40-50 minut.
Poučení? Analytický benchmark nemá šanci postihnout reálnou rychlost aplikací. Tak primitivní, jako jste tu předvedl vy, nevypovídá už vůbec o ničem.
Hm. Tak test b
spis benchmarkoval filesystem, rozhodne ne vykon daneho jazyka. Ono zapis 1GB fakt nejakou dobu trva . Pokud by mela byt tato cast aspon trosku objektivni, bylo by fajn uvest i vysledky
time dd if=/dev/zero of=./soubor bs=1M count=1024
, (pochopitelne na stejnem filesystemu, jako byly ty benchmarky) - idealne opet vickrat zopakovat a mezi testy hezky pustit sync
(ten samozrejme nezapocitavat do casu).
Posledni test je podle autora zbytecny, resp. silne nerovnopravny
Nicmene ta matika je zajimava. Mohl bych poprosit o zdrojak? Nebyla tam nejaka bota typu operace na ruzne velkych promennych (short vs. long a tak)?
S extrémním příkladem nesmyslnosti podobného uvažování jsem se setkal v článku, kde ukazovali, jak se programuje a jakousi elementární úlohu tam vyřešili kvadraticky místo lineárně. Na konci článku se pak psalo, že by to samozřejmě šlo vyřešit efektivnějí, ale že při výkonu dnešních počítačů je to jedno (pro zajímavost: bylo to někdy v roce 1988…).
Není to problém jazyka, je to problém toho, že je lidé musí hledat, zatímco v Javě je to všechno hned u nosu. (Nejen) programátoři jsou totiž obecně líní jak prasataNo něco u toho nosu taky není hnedka, ani v Javě, to se člověk sakra musí prohrabat dokumentací
# echo -n {cislo} > /proc/acpi/processor/CPU0/throttling
bye gf
Jo jo, je to moc hezke, kdyz to tak clovek cte. Ale tezko se mu veri, kdyz musi obcas s Javou neco delat na PIII/500 (384M RAM).No kolega dělá na PIII@800MHz/256MB v JBuilderu a pravda odezvy jsou o něco pomalejší, ale jde to. Pravda na mém pracovním AthlonuXP 2100 je to jiné kafe
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.