OK, naprawdę należy o to poprosić kogoś z Google, ale chcę tylko innych opinii.
Nawet Android obsługuje aplikacje z kodem natywnym, głównym narzędziem programistycznym jest Java. Ale dlaczego? Chodzi mi o to, czy interpretacja kodu na urządzeniu mobilnym nie jest zbyt wolna? Wprowadzając Froyo, Google powiedział, że nowy kompilator JIT może osiągnąć 2-5 razy szybsze aplikacje. Oznacza to, że używanie języka Java zamiast kodu natywnego jest 2-krotnie wolniejsze.
Tak, wiem, że korzystanie z aplikacji kodu zarządzanego jest bezpieczniejsze pod względem stabilności systemu, ponieważ maszyna wirtualna ma lepszą kontrolę nad programem, ale nadal ten spadek wydajności jest ogromny i nie widzę sensu, dlaczego go używać.
Odpowiedzi:
Kilka punktów:
Java to znany język, programiści go znają i nie muszą się go uczyć
trudniej jest strzelić sobie w Javie niż za pomocą kodu C / C ++, ponieważ nie ma on arytmetyki wskaźnikowej
działa na maszynie wirtualnej, więc nie ma potrzeby ponownej kompilacji dla każdego dostępnego telefonu i jest łatwy do zabezpieczenia
duża liczba narzędzi programistycznych dla języka Java (patrz punkt 1)
Kilka telefonów komórkowych korzystało już z Javy ME, więc Java była znana w branży
różnica prędkości nie jest problemem dla większości aplikacji; gdyby tak było, powinieneś kodować w języku niskiego poziomu
źródło
Na poziomie kodu bajtowego system Android nie używa języka Java. Źródłem jest Java, ale nie używa maszyny JVM.
źródło
Poprawa stabilności systemu jest bardzo ważna na urządzeniu takim jak telefon komórkowy.
Bezpieczeństwo jest jeszcze ważniejsze. Środowisko Android umożliwia użytkownikom uruchamianie częściowo zaufanych aplikacji, które mogą wykorzystywać telefon w naprawdę nieprzyjemny sposób bez doskonałych zabezpieczeń. Uruchamiając wszystkie aplikacje na maszynie wirtualnej, gwarantujesz, że żadna aplikacja nie będzie w stanie wykorzystać jądra systemu operacyjnego, chyba że istnieje luka w implementacji maszyny wirtualnej. Z kolei implementacja maszyny wirtualnej jest prawdopodobnie niewielka i ma małą, dobrze zdefiniowaną powierzchnię bezpieczeństwa.
Być może najważniejsze, gdy programy są kompilowane do kodu dla maszyny wirtualnej, nie trzeba ich ponownie kompilować na nowy sprzęt. Rynek chipów do telefonów jest zróżnicowany i szybko się zmienia, więc to wielka sprawa.
Ponadto korzystanie z Javy zmniejsza prawdopodobieństwo, że aplikacje, które ludzie piszą, będą same nadawały się do wykorzystania. Brak przepełnień bufora, błędów ze wskaźnikami itp.
źródło
Kod natywny niekoniecznie jest szybszy niż kod Java. Gdzie są dane Twojego profilu pokazujące, że kod natywny może działać szybciej?
Dlaczego Java?
Android działa na wielu różnych platformach sprzętowych. Aby zobaczyć rzeczywiste korzyści, musisz skompilować i zoptymalizować swój kod natywny dla każdej z tych różnych platform.
Wielu programistów już biegle posługuje się Javą.
Java ma ogromne wsparcie open source, z wieloma dostępnymi bibliotekami i narzędziami, które ułatwiają życie programistom.
Java chroni Cię przed wieloma problemami związanymi z kodem natywnym, takimi jak wycieki pamięci, nieprawidłowe użycie wskaźnika itp.
Java pozwala im tworzyć aplikacje piaskownicy i tworzyć lepszy model bezpieczeństwa, tak aby jedna zła aplikacja nie mogła wyłączyć całego systemu operacyjnego.
źródło
Przede wszystkim według Google Android nie używa Javy. Dlatego Oracle pozywa Google. Oracle twierdzi, że Android narusza niektóre technologie Java, ale Google twierdzi, że to Dalvik.
Po drugie, od 1995 roku nie widziałem interpretera kodu bajtowego Javy.
Czy możesz poprzeć swoje przypuszczenia dotyczące wydajności za pomocą rzeczywistych testów porównawczych? Zakres twoich domniemań nie wydaje się uzasadniony, biorąc pod uwagę niedokładne informacje ogólne, które podajesz.
źródło
Java ma dość przekonujący argument za tym, że Google używa jej w systemie Android: ma ogromną bazę programistów. Wszyscy ci programiści są (w pewnym sensie) gotowi do rozwijania swojej platformy mobilnej.
Pamiętaj, że technicznie rzecz biorąc, Android nie używa czystej Javy.
źródło
Jak wspomniano w innym miejscu, głównym problemem jest to, że Android został zaprojektowany jako przenośny system operacyjny, który działa na szerokiej gamie sprzętu. Opiera się również na strukturze i języku znanych wielu istniejącym programistom mobilnym.
Na koniec powiedziałbym, że jest to zakład na przyszłość - wszelkie problemy z wydajnością staną się nieistotne wraz z poprawą sprzętu - podobnie, zachęcając programistów do kodowania wbrew abstrakcjom, Google może znacznie łatwiej wydobyć i zmienić podstawowy system operacyjny, niż gdyby programiści kodowali do API POSIX / Unix.
W przypadku większości aplikacji narzut związany z używaniem języka opartego na maszynach wirtualnych zamiast natywnego nie jest znaczący (wąskim gardłem dla aplikacji korzystających z usług internetowych, takich jak Twitter, jest głównie sieć). Palm WebOS również to pokazuje - i to używa JavaScript zamiast Javy jako głównego języka.
Biorąc pod uwagę, że prawie wszystkie maszyny wirtualne JIT kompilują się do kodu natywnego, prędkość surowego kodu jest często porównywalna z prędkością natywną. Wiele opóźnień przypisywanych językom wyższego poziomu ma mniej wspólnego z narzutem maszyny wirtualnej niż z innymi czynnikami (złożone środowisko wykonawcze obiektów, „bezpieczeństwo” sprawdzanie dostępu do pamięci poprzez sprawdzanie granic itp.).
Pamiętaj też, że niezależnie od języka używanego do pisania aplikacji, wiele faktycznej pracy jest wykonywana w API niższego poziomu. Język najwyższego poziomu często po prostu łączy wywołania API w łańcuchy.
Istnieje oczywiście wiele wyjątków od tej reguły - gry, aplikacje audio i graficzne, które przesuwają granice sprzętu telefonicznego. Nawet na iOS programiści często przechodzą do C / C ++, aby uzyskać prędkość w tych obszarach.
źródło
Nowy JIT uruchamia aplikacje 2 - 5 razy szybciej niż stary dalvikVM (obie JAVA). Zatem porównanie to nie C przez JAVA, ale JIT przez dalvikVM.
źródło
Przede wszystkim chodzi o to samo, co Windows Mobile czy iPhone, framework .net potrzebuje własnej maszyny wirtualnej, a także kakao.
I nawet jeśli wydajność nie jest najlepsza, ponieważ jest to interpretacja kodu bajtowego, Android przyciąga całą społeczność Java jako potencjalnych programistów. Więcej aplikacji, więcej klientów itp.
Na koniec żadna wydajność nie jest taka zła, dlatego java jest używana nawet na mniejszych urządzeniach (patrz JavaMe).
źródło