Varialbe komplett Löschen

ErfinderLabyrinth

Bekanntes Mitglied
Hi,
ich möchte eine nicht mehr gebrauchte Variable löschen, sodass die Variable kein Arbeitsspeicher mehr benötigt. ich weiß nicht, ob es mit
Java:
VARIABLENNAME = null;
funktioniert
 
M

Mart

Gast
dann ist der Inhalt gelöscht aber die Referenz lebt noch

ein objekt ist dann futsch sobald du keine Referenz mehr hast die Drauf zeigt weil sie dann der garbage collector zerstört
 
M

Mart

Gast
in dem du die klasse zerstörst und das willst du denke ich mal nicht während der Laufzeit, speicher sollte aber im regelfall in java kein Problem sein
 
K

kneitzel

Gast
Wie kann ich jetzt eine static Variable komplet löschen?
Eine statische Variable kannst Du nicht so ohne weiteres löschen. Wie @Mart schon angedeutet hat: Du müsstest dazu die Klasse aus dem Speicher entfernen. Das würde gehen, wenn Du die Klasse über einen eigenen, dedizierten Classloader geladen hast und du dann alle Referenzen "löschst", die.
- auf den Classloader
- alle Klassen, die dieser geladen hat
- alle Instanzen von Klassen, die dieser geladen hat
wegwirfst.

Dann würde irgendwann der Classloader und alles was dran hängt vom Garbage Collector eingesammelt und gelöscht werden.

Aber: Das ist nichts, das man in der Regel so macht. Vermutlich meinst/willst Du etwas ganz Anderes. Und das, was da notwendig wäre, wäre auch etwas, das man gut durchdacht haben sollte und auch im Detail überblicken sollte. Denn da kommen dann halt auch so Spielchen, dass Du eine Klasse mehrfach laden kannst und dann hast Du z.B. eine statische Variable mehrfach! (Und alles, was darauf basiert ... also ein Singleton ist dann kein Singleton mehr und all sowas :) )

Und generll wird auch nie etwas von einem selbst gelöscht. Es ist etwas, das ggf. von der Speicherverwaltung gemacht wird. Das "Ob" und "Wann" liegt nicht in Deiner Hand!
 

White_Fox

Top Contributor
Mich würde ja mal interessieren, warum du das willst.

Falls dir der Speicher knapp wird, liegt das sicher nicht an einer einzelnen statischen Variable.
 

ErfinderLabyrinth

Bekanntes Mitglied
Eine statische Variable kannst Du nicht so ohne weiteres löschen. Wie @Mart schon angedeutet hat: Du müsstest dazu die Klasse aus dem Speicher entfernen. Das würde gehen, wenn Du die Klasse über einen eigenen, dedizierten Classloader geladen hast und du dann alle Referenzen "löschst", die.
- auf den Classloader
- alle Klassen, die dieser geladen hat
- alle Instanzen von Klassen, die dieser geladen hat
wegwirfst.

Dann würde irgendwann der Classloader und alles was dran hängt vom Garbage Collector eingesammelt und gelöscht werden.

Aber: Das ist nichts, das man in der Regel so macht. Vermutlich meinst/willst Du etwas ganz Anderes. Und das, was da notwendig wäre, wäre auch etwas, das man gut durchdacht haben sollte und auch im Detail überblicken sollte. Denn da kommen dann halt auch so Spielchen, dass Du eine Klasse mehrfach laden kannst und dann hast Du z.B. eine statische Variable mehrfach! (Und alles, was darauf basiert ... also ein Singleton ist dann kein Singleton mehr und all sowas :) )

Und generll wird auch nie etwas von einem selbst gelöscht. Es ist etwas, das ggf. von der Speicherverwaltung gemacht wird. Das "Ob" und "Wann" liegt nicht in Deiner Hand!
Könntest du mir noch ein Beispiel dazu geben, da ich glaube, dass ich genau das brauche
 

White_Fox

Top Contributor
an einer statischen Variable wird es nicht scheitern, aber am Milliarden statischen Variablen, die ich nicht mehr brauche?
Genau das wollte ich sagen: Du hast ein anderes Problem als eine (oder beliebig viele) statische Variablen.

Wenn du Milliarden statischer Variablen hast, die du nicht mehr brauchst, würde ich an deiner Stelle lieber mal meine Softwarearchitektur überdenken.
 
K

kneitzel

Gast
Könntest du mir noch ein Beispiel dazu geben, da ich glaube, dass ich genau das brauche
Ich glaube nicht, dass du es brauchst... statische Variablen sollten in der Regel kaum vorkommen. Erläutere doch erst einmal, was du da überhaupt machst.

Wobei ich fast fürchte, dass das wohl auf ein YouTube Tutorial hinauslaufen wird, das du vermutlich gesehen hast.
 
M

Mart

Gast
static kannst du nach googles java konventionen hernehmen ( haabs gorb überflogen )

um konstanten zu definieren ( bei objekten ist es keine Konstante wenns nicht komplett immutable ist )
oder wenn du was benutzt und am ende die klasse im gleichen zustand ist wie vorher

in beiden Fällen => wirst du niemals 1000 statische variablen haben außer irgend ein jemand hat dir quatsch eingeredet
 

Neumi5694

Top Contributor
Der Sinn und Zweck von statischen Variablen ist ja, dass sie überall in der Klasse verfügbar sind und sich nicht ändern.
Wenn du eine Variable nur zeitlich beschränkt brauchst, dann solltest du sie dort erstellen, wo du sie brauchst und so, dass sie einen eingeschränkten Gültigkeitsbereich hat.
 
M

Mart

Gast
Der Sinn und Zweck von statischen Variablen ist ja, dass sie überall in der Klasse verfügbar sind und sich nicht ändern.
du kannst ja auch "injection" so machen, wenn du eine Statische Variable hast hängt in dem objekt zb alles ab was die Statische sagt

ich habs zb so benutzt weil der ÜBersetzer immer und überall erreichbar sein muss, die "public" mehtoden des managers sind aber halt eingeschränkt somit man den manager nicht mehr "von außen" verändern kann ( zumindest beschränkt ) also schutz vor spaghetti attacken ist da
Java:
public class RTranslator
{
    private static RLanguageManager manager;

    public static void injectLanguageManager(RLanguageManager manager)
    {
        RTranslator.manager = manager;
    }

    public static void bindTranslation(StringProperty... propertyToBindCollection)
    {
        manager.translate(propertyToBindCollection);
    }

    public static void swapLanguages(String language)
    {
        manager.swapLanguage(language);
    }
    /**
     * Meant to be for Debugging Purposes when you can't reach the Manager afterwards
     */
    public void printManager() {
        System.out.println(manager.toString());
    }
}
 

Neumi5694

Top Contributor
du kannst ja auch "injection" so machen, wenn du eine Statische Variable hast hängt in dem objekt zb alles ab was die Statische sagt

ich habs zb so benutzt weil der ÜBersetzer immer und überall erreichbar sein muss, die "public" mehtoden des managers sind aber halt eingeschränkt somit man den manager nicht mehr "von außen" verändern kann ( zumindest beschränkt ) also schutz vor spaghetti attacken ist da
Java:
public class RTranslator
{
    private static RLanguageManager manager;

    public static void injectLanguageManager(RLanguageManager manager)
    {
        RTranslator.manager = manager;
    }

    public static void bindTranslation(StringProperty... propertyToBindCollection)
    {
        manager.translate(propertyToBindCollection);
    }

    public static void swapLanguages(String language)
    {
        manager.swapLanguage(language);
    }
    /**
     * Meant to be for Debugging Purposes when you can't reach the Manager afterwards
     */
    public void printManager() {
        System.out.println(manager.toString());
    }
}
Stimmt, mir schwirrte da zeitgleich der Begriff "final" mit im Kopf rum, das "nicht ändern" ist Unsinn :)
Ich mach's ja selbst des öfteren so (und Java selbst, siehe System.out).
Was ich nicht verstehe, ist, wie jemand auf die Idee kommt, eine statische Variable löschen zu müssen/wollen.
 

ErfinderLabyrinth

Bekanntes Mitglied
Ich glaube nicht, dass du es brauchst... statische Variablen sollten in der Regel kaum vorkommen. Erläutere doch erst einmal, was du da überhaupt machst.

Wobei ich fast fürchte, dass das wohl auf ein YouTube Tutorial hinauslaufen wird, das du vermutlich gesehen hast.
ich versuche ein Spiel zu programmieren, zudem man später auch Mods schreiben kann

aber andere Idee, wenn ich eine Variable in einer Liste erstelle, und diese dann entferne, wird die dann ganz gelöscht?
 
K

kneitzel

Gast
Nur zum Verständnis: Variablen erzeugt du beim Programmieren. Du schreibst also Code und in dem Code schreibst du dann die Deklaration einer Variablen. Diese Variable kann dann eine Klassenvariable, Instanzvariable, lokale Variable, Parameter, .... sein.
Das spielt aber erst einmal keine wirkliche Rolle. Was Du im Programm dann später erzeugst, sind Instanzen von Klassen.


Das ist also eine Denkweise, die Du Dir angewöhnen solltest. Wenn Du ein Spiel schreibst, dann solltest Du die Elemente identifizieren: Dann hast Du evtl. 2 Spieler, ein Spielbrett, diverse Spielfiguren u.s.w.

Und das kannst Du dann entsprechend aufbauen.

Und bei Java (und allen managed Sprachen, die einen Garbage Collector nutzen) ist es so: Wenn es vom laufenden Programm keine Referenzen (direkt oder indirekt) zu einem Element gibt, dann kann das Element gelöscht werden. Dazu führt der Garbage Collector hin und wieder "Sammlungen" durch, d.h. es sammelt alle Objekte, die gelöscht werden können und löschte diese dann. Die genauen Details sind dabei egal - Du musst Dir nur merken: Einfach Referenzen wegwerfen / überschreiben und gut ist es.
 

Neumi5694

Top Contributor
ich versuche ein Spiel zu programmieren, zudem man später auch Mods schreiben kann

aber andere Idee, wenn ich eine Variable in einer Liste erstelle, und diese dann entferne, wird die dann ganz gelöscht?
Ein Objekt dieser Liste wird dann aus dem Speicher gelöscht, sobald du es aus der Liste entfernst - aber nur, falls nicht noch eine andere Variable darauf verweist.
Wie Kneitzel bereits erwähnt hat, haben wir hier den sog. Garbate Collector, der ganau dafür zuständig ist. Früher z.B. in C musste man den Speicher freigeben, das läuft heute automatisiert. Darüber brauchst du dir keine Gedanken zu machen.
 
M

Mart

Gast
ich versuche ein Spiel zu programmieren, zudem man später auch Mods schreiben kann
wenn du dir die mods von hearts of iron anschaust

hast du sozusagen dein Grundspiel das text dateien oder ähnliche dateien "interpretiert" und auf basis von denen das psiel startet, dh deine "variablen" kannst du über java.lang.properties und eigene Datei formate lösen

dein Spiel muss nur die Dateien interpretieren
 

temi

Top Contributor
ich versuche ein Spiel zu programmieren, zudem man später auch Mods schreiben kann

aber andere Idee, wenn ich eine Variable in einer Liste erstelle, und diese dann entferne, wird die dann ganz gelöscht?
Noch eine andere Idee:

Kannst du vielleicht konkreten Code vorzeigen, aufgrund dessen du zu deiner Ausgangsfrage gekommen bist? Die Diskussion hier ist sehr abstrakt und lässt wenig hilfreiche Antworten zu, wenn wir nicht wissen, worüber wir hier überhaupt sprechen.
 

ErfinderLabyrinth

Bekanntes Mitglied
Noch eine andere Idee:

Kannst du vielleicht konkreten Code vorzeigen, aufgrund dessen du zu deiner Ausgangsfrage gekommen bist? Die Diskussion hier ist sehr abstrakt und lässt wenig hilfreiche Antworten zu, wenn wir nicht wissen, worüber wir hier überhaupt sprechen.
Ne, ich habe nur gefragt, nicht dass das Spiel nacher abstürtzt, da ich zu viele Variablen erstellt habe.
 

temi

Top Contributor
Ne, ich habe nur gefragt, nicht dass das Spiel nacher abstürtzt, da ich zu viele Variablen erstellt habe.
Ein Objekt ist mindestens 16 Byte groß. Da eine Instanz ohne Daten irgendwie sinnlos ist, kommen die Daten pro Instanz noch dazu. Jetzt kannst du dir die Frage stellen, wie viele Instanzen du gleichzeitig im Speicher haben musst und daraus den benötigten Speicherbedarf berechnen.

Falls das die eigentliche Frage gewesen sein sollte.
 

ErfinderLabyrinth

Bekanntes Mitglied
Ein Objekt ist mindestens 16 Byte groß. Da eine Instanz ohne Daten irgendwie sinnlos ist, kommen die Daten pro Instanz noch dazu. Jetzt kannst du dir die Frage stellen, wie viele Instanzen du gleichzeitig im Speicher haben musst und daraus den benötigten Speicherbedarf berechnen.

Falls das die eigentliche Frage gewesen sein sollte.
ohne den Garbage Collector bestimmt Billiarden ;)
 

temi

Top Contributor
Du zeigst am besten konkreten Code, sonst wird das schwierig.

Falls du noch keinen Code hast, dann fange einfach an das zu programmieren, was du programmieren willst.

ohne den Garbage Collector bestimmt Billiarden
Was ist an "wie viele Instanzen gleichzeitig" schwer zu verstehen? Es geht nicht darum, wie viele Instanzen du insgesamt erzeugst, sondern, wie viele Objekte du gleichzeitig im Speicher haben musst.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z JVM komplett tot - Eclipse + Browser gehen nicht + Screenshots Allgemeine Java-Themen 1
D Webseite wird nicht immer komplett ausgelesen Allgemeine Java-Themen 11
K Textdatei komplett auslesen bis auf 2 Zeilen Allgemeine Java-Themen 2
S Java komplett löschen und neu installieren Allgemeine Java-Themen 4
T JRE komplett von einem PC entfernen? Allgemeine Java-Themen 5
K Serialisierung komplett selbst machen Allgemeine Java-Themen 13
G WindowAdapter - Datensatz wird nicht komplett gespeichert Allgemeine Java-Themen 7
S GUI komplett schließen und wieder Neu laden? Allgemeine Java-Themen 4
F Bild (File) komplett serialisieren Allgemeine Java-Themen 9
R Array komplett auf null setzen Allgemeine Java-Themen 10
TheJavaKid DefaultTableModel komplett leeren Allgemeine Java-Themen 2
S komplett in native kompilieren Allgemeine Java-Themen 6
M löschen in Rot Schwarz Bäumen Allgemeine Java-Themen 6
M lineare Sondierung löschen Allgemeine Java-Themen 2
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
O Warum kann ich so keine Elemente löschen und erhalte einen IllegalStateException? Allgemeine Java-Themen 4
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
glamdring273 Discord JDA, Kanal löschen Allgemeine Java-Themen 0
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
X Größten Werte in meinem Array löschen? Allgemeine Java-Themen 16
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
S Einzigartigen String in Datenbank finden und löschen Allgemeine Java-Themen 23
J Datei löschen, die Leerzeichen im Pfad hat Allgemeine Java-Themen 5
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
A Referenzen von Bildobjekten löschen Allgemeine Java-Themen 0
I PDF freigeben zum löschen Allgemeine Java-Themen 4
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
P JDK installieren Kann man die Ordner in C:\Users\*\AppData\LocalLow\Sun\Java\.... löschen? Allgemeine Java-Themen 3
X Löschen von einer Zeile in einer Text Datei. Klappt nicht. Allgemeine Java-Themen 4
J Java - Zeile aus Text datei löschen Allgemeine Java-Themen 13
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
G Datei löschen Allgemeine Java-Themen 8
R LinkedList und Threads: Strukturprobleme bez. löschen von Elementen Allgemeine Java-Themen 3
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
L Doppelte eintraege im Stringbuffer löschen Allgemeine Java-Themen 4
J Doppelte Buchstaben löschen - letztes Wort macht er nicht Allgemeine Java-Themen 2
M lucene suchen/löschen/hinzufügen Allgemeine Java-Themen 4
R Leere Verzeichnisse löschen Allgemeine Java-Themen 11
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
V System.out.println an jeder Stelle im Projekt löschen Allgemeine Java-Themen 4
M Batch zum Java Cache löschen Allgemeine Java-Themen 3
R Löschen von Files nicht möglich Allgemeine Java-Themen 11
KrokoDiehl Verzeichnisse via FileVisitor löschen Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
127.0.0.1 StringBuffer leere Zeile löschen Allgemeine Java-Themen 8
J char-Array löschen Allgemeine Java-Themen 5
W n:m Beziehung Referenzen löschen Allgemeine Java-Themen 5
127.0.0.1 Zeilen in .txt Datei löschen Allgemeine Java-Themen 11
D Löschen-Methode im Stapelverarbeitungsprogramm Allgemeine Java-Themen 4
S JTable und Spalten löschen Frage Allgemeine Java-Themen 5
EnHancEd[] ArrayList gezielt löschen Allgemeine Java-Themen 9
S Nullen aus Array löschen Allgemeine Java-Themen 10
N Java lässt sich nicht löschen! Allgemeine Java-Themen 7
U Wie kann mit einen Java Applet Dateien erstellen,verschieben und löschen? Allgemeine Java-Themen 9
P Input/Output Ordner löschen --> geht nicht Datei --> Ja Allgemeine Java-Themen 6
K Leerzeiilen aus ArrayList löschen?! Allgemeine Java-Themen 7
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
S Singleton Instanz löschen Allgemeine Java-Themen 5
Z Ausschneiden, Kopieren, Einfügen, Löschen in JTextArea Allgemeine Java-Themen 5
K Java Feld Duplikate löschen Allgemeine Java-Themen 5
F SAXBuilder blockiert löschen von Dateien Allgemeine Java-Themen 2
L Datei sicher löschen/mehrfach überschreiben? Allgemeine Java-Themen 2
N Java geht nicht mehr zu löschen Allgemeine Java-Themen 5
E Regex alles nach ? löschen Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
W 2D-Grafik nach getthumbnail läst sich Quellbild nicht mehr löschen Allgemeine Java-Themen 3
E Regex HTML Tag und Inhalt löschen Allgemeine Java-Themen 4
S Zeilen in einer Datei löschen Allgemeine Java-Themen 3
Z aus private List<???> list eintrag löschen Allgemeine Java-Themen 4
C Zeile aus einer CSV-Datei löschen Allgemeine Java-Themen 3
J Element aus HashSet löschen Allgemeine Java-Themen 2
S Element aus ArrayListe löschen --> Thread hängt sich auf Allgemeine Java-Themen 2
A LinkedList Auslesen und Objekt Löschen Allgemeine Java-Themen 4
G Mit Batch-Datei verzeichnisse löschen Allgemeine Java-Themen 9
K von List getSelected auf ResultSet Datenbank löschen Allgemeine Java-Themen 2
S Reihen aus einem 2-dim. Array 'löschen' Allgemeine Java-Themen 2
K Threading - schreiben auf Hashmap/löschen - ConcurrentModificationException Allgemeine Java-Themen 3
A Zeilen aus einer Textdatei löschen Allgemeine Java-Themen 6
M Arraylist - Inhalte in Textferldern anzeigen, verändern und löschen. Allgemeine Java-Themen 18
S Liste Object Löschen Allgemeine Java-Themen 7
G Log4J - Logs älter als 3 Tage löschen Allgemeine Java-Themen 5
Quaxli Files massenhaft löschen Allgemeine Java-Themen 3
J Mit POI Zeile in Excel löschen Allgemeine Java-Themen 5
D Kann Tiff Datei nicht löschen Allgemeine Java-Themen 12
0x7F800000 Regex zum löschen vom unnötigen whitespace Allgemeine Java-Themen 4
Daniel_L Best Practice zum Löschen von Log-Files? Allgemeine Java-Themen 8
S Problem beim Löschen des Inhalts des Fensters Allgemeine Java-Themen 4
O Zeile eines Textfiles löschen Allgemeine Java-Themen 2
O File zum löschen "schließen" Allgemeine Java-Themen 2
G JTree Node löschen Allgemeine Java-Themen 2
C String to hex und hex-Werte löschen Allgemeine Java-Themen 2
H Benutzerkonto löschen Allgemeine Java-Themen 4
G Dateien löschen Allgemeine Java-Themen 3
G Datei löschen nach kopieren geht nicht Allgemeine Java-Themen 5
G List- Einträge löschen Allgemeine Java-Themen 3
T probleme mit file löschen Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben