Nutzt der Zuweisungsoperator Speicher in Java?

7

Ich habe zwei Strings wie folgt:

"yes", "no" .

Nun möchte ich diese Strings auf zwei Arten vergleichen:

  1. Direkt:
    Beispiel: "yes".equals("no")

  2. Indem Sie die Strings einer Variablen zuweisen: Beispiel:

    %Vor%

Gibt es in diesen beiden Fällen einen Speicher- oder Leistungsunterschied?

    
Saikiran Gosikonda 21.03.2016, 11:55
quelle

3 Antworten

14

Es gibt einen sehr kleinen Unterschied (effektiv vernachlässigbar, wir sprechen hier von Mikro-Optimierung), da die Zeichenfolge in einer lokalen Variablen gespeichert werden sollte, die das zusätzliche Bit des Speichers auf dem Stapelrahmen der entsprechenden Methode benötigt. Während die Konstanten tatsächlich im Konstantenpool gespeichert und gemeinsam genutzt werden. Mit den wahrscheinlichen Optimierungen der JVM basierend auf der Anzahl der Aufrufe wird es keinen Unterschied machen.

Beachten Sie, dass der Bytecode derselbe wäre, wenn die Variablen final oder effektiv final (nur einmal zugewiesen) wären, da sie in diesem Fall als Konstanten behandelt werden.

    
manouti 21.03.2016, 11:58
quelle
9

Das Kompilieren dieser Code-Snippets führt zu demselben Bytecode. Daher gibt es keinen Speicherverbrauch oder Leistungsunterschied.

Der Zuweisungsoperator nie belegt den Arbeitsspeicher (außer beim Autoboxing: Integer number = 42 ). Die lokale Variablendeklaration kann Speicher im Stack zuweisen (falls erforderlich), aber Sie sollten die Lesbarkeit des Codes bevorzugen.

    
frostbit 21.03.2016 12:13
quelle
6

Abhängig vom Compiler könnte es den Platz von zwei zusätzlichen Objektreferenzen auf dem Stack einnehmen, denke ich. Diese sind klein genug, dass Sie sie normalerweise ignorieren können, wenn Sie Ihre Anwendung nicht profiliert haben und Sie dort ein Problem entdeckt haben (sehr unwahrscheinlich).

  

"ja" .equals ("nein")

In echtem Code gibt es kaum eine Situation wie diese, wie Sie bereits wissen würden, wenn 2 Literale gleich sind oder nicht.

    
Puce 21.03.2016 12:10
quelle

Tags und Links