W 2001 r. Zrobiłem aplikacje na telefon J2ME. Był wielkości cegły. I prawie prawie moc obliczeniowa cegły.
Uruchamianie aplikacji Java na żądanie wymagało zapisania ich w sposób możliwie jak najbardziej proceduralny. Ponadto bardzo dużą poprawą wydajności było złapanie ArrayIndexOutOfBoundsException
, aby opuścić pętle for we wszystkich elementach w wektorze. Pomyśl o tym!
Nawet na Androidzie są "szybkie" pętle przez wszystkie elementy w tablicy i "powolne" sposoby pisania tego samego, jak wspomniano w filmach Google IO na temat urządzeń wewnętrznych dalvik VM.
Jednakże, w odpowiedzi na twoje pytanie, powiedziałbym, że najbardziej niezwykłe jest mikro-optymalizacja tego typu rzeczy w dzisiejszych czasach, a ponadto oczekiwałbym, że na maszynie wirtualnej JIT (nawet nowy Android 2.2 VM, która dodaje JIT) te optymizacje są dyskusyjne. W 2001 roku telefon uruchomił interpreter KVM na częstotliwości 33 MHz. Teraz uruchamia dalvik - o wiele szybszą maszynę wirtualną niż KVM - od 500 MHz do 1500 MHz, ze znacznie szybszą architekturą ARM (lepszy procesor, nawet pozwalający na zwiększenie prędkości zegara) z L1 e.t.c. i JIT przybywa.
Nie jesteśmy jeszcze w królestwie, w którym byłoby mi wygodnie robić bezpośrednie manipulacje pikselami w Javie - zarówno w telefonie, jak i na komputerze stacjonarnym z i7 - więc nadal istnieje normalny codzienny kod, którego Java nie jest wystarczająco szybko dla. Here's an interesting blog który twierdzi, że ekspert powiedział, że Java jest 80% prędkości C++ dla niektórych ciężkich zadań CPU; Jestem sceptyczny, piszę kod manipulacji obrazem i widzę rząd wielkości pomiędzy Javą i natywną dla pętli ponad pikselami. Może brakuje mi jakiejś sztuczki ...? : D
Mam nagrodę za pokrewne pytanie tutaj, jeśli ktoś ma cytaty na odpowiedzi na to: http://stackoverflow.com/questions/3963643/canonical-reference-on -jvm-internals-for-programmer-developers – andersoj
Wpadłem na pytanie, które jest wadliwe, ponieważ zależy od używanego kompilatora. –
Nie jest wadliwe, tylko "szerokie". –