Hallo alle zusammen 
Derzeit arbeite ich bei der Avira GmbH in Tettnang an meiner Diplomarbeit. Für die Arbeit entwickle ich ein Programm zum automatisierten Testen mit Java. Ich wende mich an euch wegen eines Problemes, bei dem ich einfach nicht weiter komme.
Ich kenne Java zwar grundlegend vom Studium, aber wirklich damit zu tun habe ich erst seit ca. 4 Monaten, also seit meiner Diplomarbeit.
Das Problem bezieht sich auf den Garbage Collector und meine beschränkte Programmiererfahrung
Ich habe nun in den vergangen Monaten eine Anwendung entwickelt. Diese Anwendung erstellt ein Objekt, welches den Test ausführt (ganz grob). Nachdem der Test beendet ist, soll das erstellte Objekt gelöscht werden um nicht unnötigen Speicherplatz zu beanspruchen... und genau da liegt mein Problem, der Speicher wird nicht freigegeben!!!
Seit Wochen bin ich nun schon auf der Suche nach einer Lösung, doch weder Google noch sonst etwas hat mir bisher weitergeholfen...
wenn ich ein Object direkt erstelle (new Object()) dann wird dieses ausgeführt und danach sauber gelöscht, da ja keine Referenz auf das Objekt vorhanden ist...
wenn ich aber ein Objekt mit einer Referenz darauf erstelle, also Object x = new Object(), dann bleibt der Speicher allokiert und ich weiß einfach nicht, wie ich den Platz wieder freigeben kann...
hier ein Beispiel:
Das Programm belegt zu Beginn ca. 28 MB im Speicher, nach der Ausführung (go) um die 66 MB... wird aber die Referenz auf das Array gelöscht (clear) dann bleibt der Speicherplatz weiterhin allokiert...
Wie bekomme ich diesen Platz wieder zurück, sprich wie kann man den Speicherplatz wieder freigeben? ist das überhaupt möglich? Gibt es Alternativen?
Bitte helft mir, ich komme wirklich nicht mehr weiter und bin schon am verzweifeln... am liebsten würd ich den PC ausm Fenster schmeißen :autsch:
Derzeit arbeite ich bei der Avira GmbH in Tettnang an meiner Diplomarbeit. Für die Arbeit entwickle ich ein Programm zum automatisierten Testen mit Java. Ich wende mich an euch wegen eines Problemes, bei dem ich einfach nicht weiter komme.
Ich kenne Java zwar grundlegend vom Studium, aber wirklich damit zu tun habe ich erst seit ca. 4 Monaten, also seit meiner Diplomarbeit.
Das Problem bezieht sich auf den Garbage Collector und meine beschränkte Programmiererfahrung
Ich habe nun in den vergangen Monaten eine Anwendung entwickelt. Diese Anwendung erstellt ein Objekt, welches den Test ausführt (ganz grob). Nachdem der Test beendet ist, soll das erstellte Objekt gelöscht werden um nicht unnötigen Speicherplatz zu beanspruchen... und genau da liegt mein Problem, der Speicher wird nicht freigegeben!!!
Seit Wochen bin ich nun schon auf der Suche nach einer Lösung, doch weder Google noch sonst etwas hat mir bisher weitergeholfen...
wenn ich ein Object direkt erstelle (new Object()) dann wird dieses ausgeführt und danach sauber gelöscht, da ja keine Referenz auf das Objekt vorhanden ist...
wenn ich aber ein Objekt mit einer Referenz darauf erstelle, also Object x = new Object(), dann bleibt der Speicher allokiert und ich weiß einfach nicht, wie ich den Platz wieder freigeben kann...
hier ein Beispiel:
Code:
package mypackage;
import java.io.IOException;
import java.io.InputStream;
public class MemTest
{
public Boolean stop = false;
private MemClass[] memArray = null;
public void doAlloc(Integer num)
{
memArray = new MemClass[num];
for(int i=0; i<num; i++)
{
memArray[i] = new MemClass();
}
}
public void clear()
{
memArray = null;
}
public static void main(String[] args)
{
MemTest mt = new MemTest();
System.out.print("Please type your command started: ");
byte[] buffer = new byte[80];
String input = "";
int read;
while(!mt.stop)
{
try
{
// read the characters
InputStream is = System.in;
if(is.available() != 0)
{
read = System.in.read(buffer, 0, 80);
input = new String(buffer, 0, read);
if(input.equalsIgnoreCase("go" +
System.getProperty("line.separator")))
{
mt.doAlloc(1000000);
}
else if(input.equalsIgnoreCase("clear" +
System.getProperty("line.separator")))
{
mt.clear();
}
else if(input.equalsIgnoreCase("exit" +
System.getProperty("line.separator")))
{
mt.stop = true;
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
Das Programm belegt zu Beginn ca. 28 MB im Speicher, nach der Ausführung (go) um die 66 MB... wird aber die Referenz auf das Array gelöscht (clear) dann bleibt der Speicherplatz weiterhin allokiert...
Wie bekomme ich diesen Platz wieder zurück, sprich wie kann man den Speicherplatz wieder freigeben? ist das überhaupt möglich? Gibt es Alternativen?
Bitte helft mir, ich komme wirklich nicht mehr weiter und bin schon am verzweifeln... am liebsten würd ich den PC ausm Fenster schmeißen :autsch: