2 votes

Suppression du pool de constantes Java au moment de l'exécution

J'ai la classe Java suivante :

public class Test {

    public static void main(String[] args) {
        if (false) {
            log("String_to_be_never_printed_1");
        }

        if (isPrintable()) {
            log("String_to_be_never_printed_2");
        }

    }

    private static boolean isPrintable() {
        return false;
    }

    private static void log(String s) {
        System.out.println(s);
    }

}

Dans les deux déclarations if, le résultat sera faux. Lorsque j'édite la table de pool constante pour cette classe, j'obtiens :

Constant pool:
   #1 = Class              #2             // Test
   #2 = Utf8               Test
   ....
  #18 = Utf8               isPrintable
  #19 = Utf8               ()Z
  #20 = String             #21            // String_to_be_never_printed_2
  #21 = Utf8               String_to_be_never_printed_2
  #22 = Methodref          #1.#23         // Test.log:(Ljava/lang/String;)V
  #23 = NameAndType        #24:#25        // log:(Ljava/lang/String;)V
  ...

La String_to_be_never_printed_2 est présente (#20), alors que la String_to_be_never_printed_1 n'est nulle part. Ceci est attendu car le compilateur a optimisé la première instruction if.

Ma question est de savoir si la VM parviendra à supprimer la String_to_be_never_printed_2 du pool de constantes (car elle ne sera jamais utilisée) ?

3voto

ControlAltDel Points 7430

Rien n'est jamais retiré du pool de constantes. Cela ne servirait à rien de toute façon, car la suppression n'aurait aucun effet sur la taille réelle de la mémoire.

0voto

KayV Points 3131

Les objets qui sont présents dans la mémoire du tas sont éligibles à la collecte des déchets par la JVM elle-même. Les objets du pool constant ne sont pas collectés car ils n'ont pas beaucoup d'effet sur la taille de la mémoire attribuée à la JVM.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X