Diskuze: Rýchlosť a náročnosť: C++ vs. Java
Tvůrce
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Protože není jasné, jestli se ptáš na rychlost android vs iOS nebo C vs Java, zkusím odpovědět trochu obšírněji.
Především není snadné srovnávat rychlost jazyků. Java je z principu pomalejší kvůli práci s pamětí a garbage collectoru. Na druhou stranu je C++ náročnější na programátorské dovednosti. Takže lze napsat program v C++, který poběží daleko rychleji, ale je nutné být šetrný k paměti a opatrný s architekturou procesoru. Čím je aplikace složitější, tím menší je pravděpodobnost, že se to povede.
Důležitým faktem je, že rychlost Javy je dostačující v naprosté většině případů. Většinou se tedy o rychlost vůbec nemusíš starat. Některé vysoce specializované aplikace implementované v Javě jsou rychlejší než nativní kód, čistě z toho důvodu, že složitost kódu v Javě byla řádově nižší, takže zůstalo více prostoru pro optimalizace.
Dalším faktorem je kvalita JVM, které bývají na mobilním HW ořezané a nekvalitní. Efektivita se tedy bude lišit v rámci prostředí a procesorů. Na mobilu by tedy nativní aplikace měly s přehledem vyhrát. Časem se to ale bude měnit a zlepšovat s příchodem 64-bitových procesorů.
Další srovnání je mezi androidem a iOS. Tady iOS s přehledem vede, protože je kompletně hardwarově akcelerované a CPU většinu času nic nedělá. Android musí běžet i na slabším hardwaru, takže akceleraci nemá a celý systém tím trpí.
Aplikace na iOS navíc nejsou založené na C, ale na Objective-C. Poslední verze kompilátoru clang je nesmírně rychlá a s pamětí pracuje velice dobře. Tady Android prohraje na celé čáře. Na podzim navíc Apple plánuje nový jazyk Swift, který už návrhem podporuje ještě rychlejší kód, než má clang. Pokud k tomu přidám skvělý hardware (mám zařízení s procesory A6 i A7 a GPU na A7 mi běží 4x rychleji v kritických situacích), tak má iOS výhodu jak v nativním kódu, kompilátoru, který se specializuje pouze na 2 fyzická zařízení a hodně rychlý hardware. Tahle kombinace způsobuje, že je iOS daleko rychlejší, než Android zařízení.
Zaujíma ma predovšetkým rýchlosť na mobilných zariadeniach. Tam je
dôležitá každá "kvapka" výkonu, zvlášť na Androide, kde je problém s
obrovským počtom HW. Ak by teda bolo C++ rýchlejšie na Androide ako
Java...
Niekde som čítal, že dobrou optimalizáciou správy pamäte sa dajú
zmenšiť nároky na pamäť až o 50%. Je to pravda?
Pokud mluvíme o hře, tak C++ bude rychlejší. Pokud se ale na rychlost musíš ptát, nedokážeš takový program napsat. K tomu je nutné rozumět architektuře ARM procesorů a specifikám jazyka. V případě standardního UI nic nezískáš, protože bude pomalý systém pod tvojí aplikací.
Optimalizace paměti vede ke snížení rychlosti, stejně jako zvýšení rychlosti vyžaduje vyšší paměťové nároky. To je typický optimalizační trade-off.
Optimalizace navíc snižuje čitelnost programu. Například v C záleží na pořadí proměnných. Proměnné se obvykle shlukují do logických celků a zapisují v pořadí, které umožňuje zvýšit čitelnost programu. Jejich pořadí je ale důležité pro rychlost programu a velikost paměti, kterou budou zabírat (memory alignment). Navíc existují techniky, kterými lze zvýšit efektivnost obou (tzv. tagged pointers), ale pokud vím, podporuje to pouze Apple.
Ďakujem za vysvetlenie
Pravdou je, že ja viem len základy C++, čo som sa dávnejšie učil. Keby som mal čosi robiť, bola by to len nejaká aplikácia zobrazujúca obsah, založená na princípe browseru a na to by teda asi podla toho čo hovoris bola lepsia Java
Zobrazeno 5 zpráv z 5.