Hallo Leute,
Ich bin momentan auf der Suche nach meinen Memory Leaks an meine Grenzen gestoßen.
ganz kurze Programmbeschreibung/ Programmübersicht:
Darum einmal 2 Fragen, die ich gerne geklärt hätte:
1. Werden alle Variablen die in einer Methode verwendet werden, nach beendigung der Methode freigegeben für den Garbagecollector (GC)? Manche Methoden werden werden mindestens 1000 Mal aufgerufen und ich möchte diese gleich vorweg als RAM-Fresser ausschließen. Hier ein Beispiel wie soeine aussieht (eine Funktion aus der Klasse, die alle Methoden zur Kommunikation mit der Datenbank enthält):
2. Wie wirken sich Klassenvariablen auf den Arbeitsspeicher aus?
Hier der Beginn des 1. Crawlers (wird als Thread gestartet - da alle 12 gleichzeitig crawlen sollen)
Diese Variablen werden dann in einigen Methoden verwendet und immer neu initialisiert.
z.B.:
Methode1(..){
f = new Fahrzeug();
f.setName("...");
}
Methode2(..){
String name = f.getName();
}
Ich hoffe ihr könnt mir helfen
mfg, Traxxas
Ich bin momentan auf der Suche nach meinen Memory Leaks an meine Grenzen gestoßen.
ganz kurze Programmbeschreibung/ Programmübersicht:
- Zuerst werden 12 Crawler gestartet, die 12 Websites crawlen und den Inhalt in eine Datenbank speichern.
- Anschließend werden diese Daten verglichen/berechnet
- und dann angezeigt
Darum einmal 2 Fragen, die ich gerne geklärt hätte:
1. Werden alle Variablen die in einer Methode verwendet werden, nach beendigung der Methode freigegeben für den Garbagecollector (GC)? Manche Methoden werden werden mindestens 1000 Mal aufgerufen und ich möchte diese gleich vorweg als RAM-Fresser ausschließen. Hier ein Beispiel wie soeine aussieht (eine Funktion aus der Klasse, die alle Methoden zur Kommunikation mit der Datenbank enthält):
Java:
@Override
public void addFahrzeug(Fahrzeug neuesFahrzeug) throws HibernateException {
Session s = HibernateUtil.getSessionFactory().openSession();
Transaction tx = s.beginTransaction();
try {
if (neuesFahrzeug.getFId() != null) {
s.merge(neuesFahrzeug);
} else {
s.saveOrUpdate(neuesFahrzeug);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
tx.commit();
s.close();
}
}
2. Wie wirken sich Klassenvariablen auf den Arbeitsspeicher aus?
Hier der Beginn des 1. Crawlers (wird als Thread gestartet - da alle 12 gleichzeitig crawlen sollen)
Java:
public class Crawler1 implements Runnable {
private static final IDAO_Dbinterface dao = new PostgresDB();
private static Fahrzeug f = new Fahrzeug();
private static Marke fmarke = new Marke();
private static List<String> fahrzeuge;
private static String[] sfield;
private static String[] sfield2;
private static String[] sfield3;
z.B.:
Methode1(..){
f = new Fahrzeug();
f.setName("...");
}
Methode2(..){
String name = f.getName();
}
Ich hoffe ihr könnt mir helfen
mfg, Traxxas