Nel 2001 ho creato app per un telefono J2ME. Era delle dimensioni di un mattone. E quasi il potere computazionale di un mattone.
Per far funzionare le app Java in modo accettabile è necessario scriverle nel modo più procedurale possibile. Inoltre, l'enorme miglioramento delle prestazioni è stato quello di catturare lo ArrayIndexOutOfBoundsException
per uscire da loop su tutti gli elementi di un vettore. Pensaci!
Anche su Android ci sono cicli "veloci" attraverso tutti gli elementi in un array e modi "lenti" di scrivere la stessa cosa, come menzionato nei video IO di Google sugli interni di dalvik VM.
Tuttavia, in risposta alla tua domanda, direi che è molto insolito dover micro-ottimizzare questo tipo di cose in questi giorni, e mi aspetterei ancora che su un JIT VM (anche il nuovo Android 2.2 VM, che aggiunge JIT) queste ottimizzazioni sono discutibili. Nel 2001 il telefono eseguiva un interprete KVM a 33MHz. Ora esegue dalvik - una VM molto più veloce di KVM - a 500MHz a 1500MHz, con un'architettura ARM molto più veloce (un processore migliore che consente anche guadagni di velocità di clock) con L1 e.t.c. e JIT arriva.
Non siamo ancora nei regni in cui mi sentirei a mio agio nel manipolare direttamente i pixel in Java - sia sul telefono che sul desktop con un i7 - quindi c'è ancora un normale codice giornaliero che Java non è abbastanza veloce per Here's an interesting blog che afferma che un esperto ha affermato che Java è l'80% della velocità di C++ per un compito pesante della CPU; Sono scettico, scrivo codice di manipolazione delle immagini e vedo un ordine di grandezza tra Java e nativo per loop su pixel. Forse mi manca qualche trucco ...? : D
Ho una taglia su una domanda correlata qui, se qualcuno ha delle citazioni per le risposte a questo: http://stackoverflow.com/questions/3963643/canonical-reference-on -jvm-internals-for-programmatore-sviluppatori – andersoj
Sono caduto la domanda è difettosa perché dipende dal compilatore che si utilizza –
Non imperfetto, solo "ampio". –