5 Stimmen

Java: "Statische" Methoden

Wenn ich eine statische Methode aufrufe wie:

Something.action();

Da eine Instanz nicht erstellt wird, wie lange wird die Klasse der statischen Methode im Speicher gehalten?

Wenn ich die gleiche Methode aufrufe, wird die Klasse bei jedem Aufruf neu geladen, da keine Instanz existiert?

Und werden nur einzelne statische Methoden beim Aufruf geladen oder werden alle Methoden und statischen Methoden einer Klasse in den Speicher geladen, auch wenn nur eine statische Methode verwendet wird?

11voto

krosenvold Punkte 73093

Wenn Sie nicht die Garbage Collection von permgenspace konfiguriert haben, bleibt die Klasse im Speicher, bis der vm beendet wird. Die vollständige Klasse wird mit allen statischen Methoden geladen.

4voto

Gowri Punkte 1313

Die Klasse bleibt im Speicher, bis der Classloader, der die Klasse geladen hat, im Speicher bleibt. Wenn die Klasse also vom System-Classloader geladen wird, wird die Klasse meines Wissens nie entladen.

Wenn Sie eine Klasse entladen wollen, müssen Sie das tun:

  1. Laden der Klasse und aller Klassen, die auf diese Klasse verweisen, mit einem benutzerdefinierten Classloader
  2. Nachdem Sie mit der Klasse fertig sind, geben Sie alle Verweise auf die Klasse frei, d.h. stellen Sie sicher, dass es keine Objektinstanzen dieser Klasse mehr gibt
  3. Entladen Sie die Klasse und alle Klassen, die auf sie verweisen, indem Sie die benutzerdefinierte Classloader-Instanz freigeben, die diese Klassen geladen hat.

2voto

Guillaume Punkte 17737

In einigen Konfigurationen wird die Klasse sogar geladen, bevor Sie den Anruf tätigen. Wir verwendeten BES (Borland Enterprise Server) und hatten ein Problem mit unseren Solaris-Produktionsservern, bei dem alle referenzierten Klassen beim Start unserer Anwendung rekursiv geladen wurden. Das heißt, wenn die Hauptklasse unserer Anwendung geladen wurde, lud der Anwendungsserver alle Klassen, auf die im Importabschnitt dieser Klasse verwiesen wurde ... rekursiv.

Nebenbei bemerkt: Wenn Sie nicht gerade in einer Umgebung mit sehr eingeschränktem Arbeitsspeicher arbeiten oder viele unnötige Klassen laden, sollten Sie sich nicht zu sehr um den Speicherverbrauch der in den Speicher geladenen Klassen kümmern.

1voto

boutta Punkte 23381

El Etwas Klasse sollte geladen werden, wenn die Aufruferklasse geladen wird. Und sie bleibt dort bis zum Beenden der VM, wie krosenvold sagte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X