¿Ofuscar un programa Java afecta su rendimiento (excluyendo el cambio de nombre de las cosas)?¿La ofuscación afecta el rendimiento?
Respuesta
No. La ofuscación simplemente reemplaza su código de nombre sensato con urneadable. En algunos casos (por ejemplo cuando se utiliza ProGuard, nuestro código puede incluso ser "optimizado", mediante la eliminación de todos los bloques de código inútiles (como if(false)
y Imitador declaraciones).
EDITAR (para aclarar las ideas Magesh) .
Al usar un ofuscador (y NO ofuscarlo a mano, lo cual no es una buena idea), cargará sus clases y alineará algunos métodos, o bloques de código (como el antes mencionado si) para simplificar el código para bloques grandes obtenidos de código. Como consecuencia, hay menos llamadas a métodos, que requieren menos uso de pila, y luego se ajusta la aplicación.
La otra cosa es ofuscador generalmente lo hace para cambiar el nombre de todas las variables de mySmartVariable
a a$a$a
, haciendo imposible la descompilación (ya que un descompilador java considera $
como el símbolo utilizado para identificar las clases internas y anónimas, y no las variables).
Definitivamente sí: excepto en el caso más simple donde solo se codifican los nombres de los identificadores, solo se trata de la cantidad de rendimiento que se ve afectado. Más detalles, por ejemplo, here, información general sobre las técnicas de ofuscación está disponible en el artículo de Wikipedia Obfuscated code.
Si agrega código redundante que nunca se cruza, no. Si agrega lógica que debe atravesarse en la ejecución normal de su código, sí, afectará el rendimiento. Cuánto depende de qué estructura ilógica haya intentado agregar para confundir piratas de software.
A veces, sí. En Java ME (la "versión para teléfono móvil" de Java), la ofuscación funciona en el código de bytes compilado, y (entre otras cosas) reemplaza los nombres con los cortos, generados automáticamente. Esto hace que el código de bytes sea más corto, lo que al menos hace que sea más rápido descargar la aplicación a través de la red.
En general, la ofuscación al cambiar el nombre de variables, métodos y nombres de clase a nombres más sin sentido no afecta el rendimiento. Algunos proveedores de software de ofuscación incluso afirman que, aparte de la ofuscación, también hay una ganancia de rendimiento de hasta un 30%. Aunque nunca he probado estas afirmaciones, nunca las he visto probadas, y por lo tanto las encuentro difíciles de creer.
Sin embargo, tenga en cuenta que algunos softwares también permiten la ofuscación del flujo: agregar bucles de control sin sentido a las declaraciones para que el código sea más difícil de seguir. Que tiene tiene un efecto negativo en el rendimiento, aunque pequeño.
Punto interesante (realmente, no es broma aquí), Razzie. Me pregunto cuál es el interés ya que, una vez que involucra ofuscación, considera su código en manos hostiles que pueden usar herramientas de análisis de código para eliminar métodos vacíos y métodos en línea llamados 1 ... – Riduidel
Los buenos ofuscadores pueden producir código totalmente ilegible, usando goto's y otra basura, lo que resulta en un código que es muy difícil de descompilar (bien). Esto viene con una pena de rendimiento sin embargo. Eche un vistazo a http://www.excelsior-usa.com/articles/java-obfuscators.html#performance, lectura interesante. – Razzie
- 1. z-index, ¿cómo afecta el rendimiento?
- 2. ¿El tamaño de la tabla afecta el rendimiento de INSERTAR?
- 3. ¿El número de columnas afecta el rendimiento de la consulta?
- 4. ¿La cantidad de espacios de nombres afecta el rendimiento?
- 5. ¿Cómo afecta la cláusula IN el rendimiento en Oracle?
- 6. ¿Cómo afecta la llamada al método el rendimiento en Java?
- 7. ¿La colocación de un bloque try-catch afecta el rendimiento?
- 8. ¿El uso de funciones anónimas afecta el rendimiento?
- 9. ¿El tamaño de ensamblado .NET afecta el rendimiento?
- 10. ¿Por qué el orden de JIT afecta el rendimiento?
- 11. ¿Qué es el aliasing y cómo afecta el rendimiento?
- 12. ¿El uso de un marco PHP afecta el rendimiento?
- 13. En SQL, ¿cómo afecta el uso de DISTINCT al rendimiento?
- 14. ¿El límite máximo de la propiedad de configuración MaxReceivedMessageSize en wcf afecta el rendimiento del servicio?
- 15. ¿El uso extenso de señales y ranuras afecta el rendimiento de la aplicación?
- 16. ¿El tamaño de un archivo jar afecta el rendimiento de la JVM?
- 17. ¿La estructura del espacio de nombre o de la carpeta afecta el rendimiento de un ensamblaje?
- 18. Cómo la coherencia de la memoria caché afecta el rendimiento en este caso
- 19. ¿La inicialización de la variable local con nulo afecta el rendimiento?
- 20. ¿La longitud del campo de la base de datos (máxima) afecta el rendimiento?
- 21. ¿Cómo afecta un registro de transacciones grande al rendimiento?
- 22. ¿La carga de muchos paquetes afecta el rendimiento general de una aplicación Symfony2?
- 23. ¿El uso de espacios de nombres afecta el rendimiento o el tiempo de compilación?
- 24. ¿Fijar un objeto en el LOH afecta el rendimiento del GC?
- 25. ¿El orden de las condiciones en una cláusula WHERE afecta el rendimiento de MySQL?
- 26. ¿Cómo afecta la codificación de caracteres predeterminada de la plataforma al rendimiento multiplataforma
- 27. ¿Cómo afecta la sugerencia del índice SQL al rendimiento de la consulta?
- 28. ¿La posición de la etiqueta <script> en HTML afecta el rendimiento de la página web?
- 29. ofuscación y GPL
- 30. Ofuscación de imágenes
pero agregar un método vacío puede hacer que sea lento ¿no? –
@Magesh Elimina, no agrega bloques de código inútiles. –
@James, no siempre, vea mi respuesta. Algunos programas de software agregan flujos de control sin sentido por lo que el código es mucho más difícil de leer, p. ofuscación de flujo. Eso tiene un impacto en el rendimiento, aunque pequeño. – Razzie