Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + automatización eficaz

Declarar variables locales como constantes

Nuestros ethical hackers explican que es un análisis estático de software y que durante la ejecución de dicho análisis el compilador puede tomar las variables que no cambian su valor en todo el código como constantes. Por último, a través de un ejemplo en Java, muestran dicho análisis.

Necesidad

Declarar variables locales o parámetros de funciones como constantes en Java.

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. La aplicación está desarrollada en Java.

  2. La aplicación presenta problemas de rendimiento.

  3. El compilador soporta optimizaciones basadas en análisis estático.

Solución

El análisis estático de software es un análisis que se realiza sin ejecutar el programa como tal, es decir, el análisis se realiza de manera automática sobre fragmentos del código fuente y no sobre todo el código como tal.

Algunos compiladores, durante la realización del análisis estático, pueden inferir o determinar cuales variables, en realidad, son constantes (no cambian) a lo largo de la ejecución de todo el programa, y por ende tratarlas como tal [1], [2]. Lo anterior lo hace codificando el valor de la constante dentro de la instrucción del ensamblador como un valor inmediato, es decir, dentro de la instrucción.

  1. Esta optimización tiene las siguientes ventajas:

    • Disminución del número de instrucciones del programa. Dado que no se requiere ejecutar operaciones de carga y almacenamiento de la memoria a los registros.

    • Disminución del número de memoria ocupado. Dado que no se requiere separar memoria para variables.

  2. Teniendo en consideración la necesidad y el contexto de la presente solución, es recomendable definir las variables locales y los parámetros de una función o métodos como constantes. Es decir, una vez inicializadas no pueden cambiar su valor. De esta forma el compilador puede realizar optimizaciones durante la generación del código que mejoran el rendimiento de la aplicación.

  3. Adicionalmente, desde el punto de vista de la calidad del código, también se considera una excelente practica no reutilizar parámetros durante el cuerpo de una función.

  4. Los parámetros y variables locales de un método pueden definirse de la siguiente manera.

    Main.java
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    class Main {
      public static void imprimir (final String mensaje)
      {
        final int limite = 5;
        for (int i=0; i<limite; i++) {
          System.out.println(i);
        }
      }
      public static void main(String[] args) {
        imprimir("Fluid Attacks");
      }
    }
    
  5. Note como en el método imprimir se usó el modificador final para el parámetro mensaje y para la variable local limite.

  6. Compilando y ejecutando el programa, vemos que no se modifica el funcionamiento.

    1
    2
    3
    4
    5
    6
    7
    % javac Main.java
    % java Main
    
    1
    2
    3
    4
    

Descargas

Puedes descargar el código fuente pulsando en el siguiente enlace:

Main.java Clase Main, define los parámetros y variables locales.




Haz un comentario

Estado de los servicios - Términos de Uso