2017-06-12 1 views
3

Angenommen wir eine Klasse Const.java mit 1000 String-Konstanten haben:java Zugriffszeit auf Variablen

public static final String foo1 = "foo1"; 
public static final String foo2 = "foo2"; 
... 
public static final String foo1000 = "foo1000"; 

nun einige Verfahren in einer anderen Klasse führt

String s = Const.foo1000; 

Hat Zugriffszeit von Variablen von der Anzahl abhängig von solchen Variablen? (Das heißt, wenn es 1.000.000 Strings in Const.java gäbe, würde Code mit der gleichen Geschwindigkeit laufen?)

+0

Es ist unmöglich zu erklären, 1.000.000 String-Konstanten in 'Const.java'. Das technische Maximum ist weniger als 33.000. Aber die Auswirkung auf die Leistung ist genau null, wie [erklärt von VGR] (https://stackoverflow.com/a/44504273/2711488); Wenn die Klasse 'Const' nur diese Deklarationen enthält, wird sie zur Laufzeit nicht einmal geladen. – Holger

Antwort

2

Die Zugriffszeit wird immer die gleiche sein.

Ihre Klasse wird mit dem Classloader in den RAM-Speicher geladen, wenn die Anwendung gestartet wird. Konstanten (static/final) werden an einer Speicherposition gespeichert, die in Ihrem Code zur Kompilierungszeit ersetzt wird, wo immer sie verwendet wird.

Der einzige Unterschied, den Sie beachten sollten, ist zum Zeitpunkt des Starts Ihrer Anwendung, der proportional zur Anzahl der Variablen in der Klasse ist.

Der Zugriff auf eine Speicherposition ist immer O (1), wie das Abrufen eines Objekts aus einer HashMap.

2

Ja, es würde mit der gleichen Geschwindigkeit laufen. Ein wichtiger Grund ist, dass die Konstanten alle zur Kompilierungszeit und nicht zur Laufzeit aufgelöst werden.

Jedes statische Endfeld, das nur aus Literalen oder Werten anderer statischer Endfelder besteht, die nur aus Literalen bestehen, wird beim Kompilieren des Codes analysiert. In der Tat, wenn Sie die Zuordnung zu dekompilieren, würden Sie sehen:

String s = "foo1000"; // No reference whatsoever to Const 
+0

Dies gilt für alle 'final' Variablen mit einem konstanten Initialisierer, es ist nicht erforderlich ein' statisches' Feld zu sein. – Holger