¿El compilador de Eclipse convertirá automáticamente la multiplicación por una potencia de dos en un cambio de bit, o debería hacerlo manualmente? Gracias por la ayuda.Pregunta de optimización de Java rápida
Respuesta
Respuesta corta: No. El compilador del código fuente no reemplazará una multiplicación por dos con un cambio de bit.
Respuesta larga: No lo hará, porque no puede saber si un cambio de bit es más rápido que una multiplicación en la plataforma. El código finalmente se ejecutará. Entonces, la pregunta debería ser si una VM específica reemplazará la multiplicación con un cambio de bit, y probablemente lo haga. Experimenté un poco con esto para optimizar un bloque de código y es interesante que el Hotspot de Sun muestra un comportamiento diferente aquí, dependiendo de si el programa se ejecuta en un AMD o en una CPU Intel (al menos con las CPU que probé). En cualquier caso, una multiplicación con una potencia de dos se reemplaza con un cambio de bit, pero para las multiplicaciones con una potencia de dos +/- 1 (3, 5, 7, 9, 15, 17, ...), la zona activa generan un cambio de bit y una suma o resta para las CPU de Intel, al tiempo que generan una multiplicación para las CPU de AMD, ya que la CPU de AMD ejecuta una multiplicación mucho más rápida que la CPU de Intel. Por supuesto, es posible que este comportamiento difiera entre diferentes modelos de CPU de cada proveedor.
Si está interesado en saber qué está haciendo realmente la máquina virtual, es bastante beneficioso obtener la compilación de depuración de jdk7 y habilitar volcados del código de ensamblador generado por el compilador de zona activa.
No adivine en segundo lugar un compilador Java moderno a menos que sepa exactamente lo que está haciendo. Esto no solo se aplica a las matemáticas simples como preguntas, sino a todo. Ej .: me gusta el control de flujo.
Las personas que son más inteligentes que nosotros han puesto mucho esfuerzo en hacerlo todo súper rápido.
¿Cómo está pidiendo == segundo adivinar? – HRJ
@HRJ Cuando se trata de una cuestión de optimización prematura –
no veo cómo se podría inferir que se trata de un caso de "optimización prematura". Además, la pregunta no es solo relevante para el caso del OP, sino para muchos otros casos que los visitantes de StackOverflow pueden tener. – HRJ
En general, no se puede ser más astuto que JVM a menos que exista un nivel muy alto que saber que no se puede deducir automáticamente. Esto generalmente significa que hay un mejor algoritmo disponible que el que se usa actualmente en lugar de tener que ajustar manualmente su fuente. Puede utilizar el generador de perfiles jvisualvm disponible en los últimos JDK de Java 6 para investigar su programa y ver dónde están los cuellos de botella. Por ejemplo, el gasto de creación de objetos nuevos en lugar de reutilizar los antiguos ha disminuido radicalmente en los últimos 10 años, por lo que no debe seguir ningún consejo anterior para ajustar su programa java sin examinar si aún se mantiene.
Sin embargo, descubrirá que mantener su programa simple y, sobre todo, legible, lo hará mucho más fácil de mantener tanto para usted como para los futuros programadores. Cualquier complejidad innecesaria desconcertará a sus futuros lectores, y tendrá que decir en un comentario por qué DEBE ser así (de lo contrario, simplemente lo volverán a refaccionar en su forma original :)
Siempre escriba primero el código de limpieza. – jcolebrand
- 1. Java 7 "optimización" de clasificación
- 2. Pregunta rápida sobre los operadores de flecha
- 3. Pregunta sobre la optimización en C++
- 4. Pregunta de Java Scanner
- 5. Pregunta rápida sobre la compilación condicional (ifndef)
- 6. ordenación rápida en Fa # - sintaxis pregunta
- 7. Pregunta de aserción de Java
- 8. Pregunta de reflexión de Java
- 9. Pregunta rápida de jQuery: detener la propagación de eventos?
- 10. matriz java lista rápida
- 11. Java pregunta estructura de datos
- 12. Pregunta de matriz 2D Java
- 13. Pregunta rápida sobre sprites CSS y uso de memoria
- 14. Pregunta de registro MASM rápida, para principiantes - DX: AX
- 15. optimización de Objective-C
- 16. Optimización del compilador: bytecode de Java
- 17. Java: optimización del tipo SAM
- 18. Pregunta de rendimiento de filtros de Java
- 19. Java volátil pregunta variables
- 20. java - general synchronizedList pregunta
- 21. java pregunta básica
- 22. Java hprof pregunta
- 23. Pregunta sincronizada Java
- 24. otra java pregunta genérica
- 25. Java | = pregunta del operador
- 26. Java Pregunta sobre Static
- 27. Optimización del compilador de Java para llamadas a métodos repetidos?
- 28. Pregunta de estilo getter/setter de Java
- 29. Pregunta básica de Java: igualdad de cadenas
- 30. Pregunta de rendimiento de Java Collection
+1 para comparación amd/intel –