En 2001 hice aplicaciones para un teléfono J2ME. Era del tamaño de un ladrillo. Y casi el poder computacional de un ladrillo.
Para que las aplicaciones Java se ejecuten de forma aceptable es necesario escribirlas de la manera más procesal posible. Además, la mejora de rendimiento muy grande fue capturar el ArrayIndexOutOfBoundsException
para salir de bucles para todos los elementos en un vector. ¡Piénsalo!
Incluso en Android hay bucles "rápidos" a través de todos los elementos en una matriz y formas "lentas" de escribir lo mismo, como se menciona en los videos de Google IO en la parte interna de dalvik VM.
Sin embargo, en respuesta a su pregunta, diría que es muy inusual tener que micro-optimizar este tipo de cosas en estos días, y además esperaría que en una máquina virtual JIT (incluso el nuevo Android 2.2 VM, que agrega JIT) estas optimizaciones son discutibles. En 2001, el teléfono ejecutó el intérprete de KVM a 33MHz. Ahora ejecuta dalvik, una VM mucho más rápida que KVM, de 500MHz a 1500MHz, con una arquitectura ARM mucho más rápida (mejor procesador incluso permitiendo ganancias de velocidad de reloj) con L1 e.t.c. y JIT llega.
Todavía no nos encontramos en el ámbito en el que me sentiría cómodo realizando la manipulación directa de píxeles en Java, ya sea en el teléfono o en el escritorio con un i7, por lo que todavía hay código normal que Java no lo suficientemente rápido para. Here's an interesting blog que afirma que un experto ha dicho que Java tiene un 80% de velocidad C++ para algunas tareas pesadas de CPU; Soy escéptico, escribo código de manipulación de imágenes y veo un orden de magnitud entre Java y nativo para bucles sobre píxeles. Tal vez me estoy perdiendo un truco ...? : D
Tengo una recompensa sobre una pregunta relacionada aquí, si alguien tiene citas para las respuestas a esta: http://stackoverflow.com/questions/3963643/canonical-reference-on -jvm-internals-for-programmer-developers – andersoj
Me cayó la pregunta es defectuoso porque depende del compilador que utiliza –
No defectuoso, simplemente "amplio". –