W
waynel
Gast
Hallo Welt !!!
Ich mach mir gerade mal ne kleine Webanwendung mit Tomcat.
Mein Problem ist, daß nach ca. 100 Aufrufen nur noch "out of memory"-Meldung im Browser kommt, und jstat -gcpermcapacity sagt mir, daß >80MB verbraten sind (PGC~PGCMX)
Die Seiten werden aus einer DB generiert.Ich vermute zwar, daß der Fehler nicht in verwaisten Connections liegt, aber trotzdem mal ein Beispiel:
Wenn hier was falsch ist, lasse ich mich gern belehren.
Der grobe Aufbau der Seite ist wie folgt:
header, page, footer entsprechen vom Aufbau her o.g. someOutput.
Zusätzlich nutze ich noch eine Hand voll Variablen für Zähler (int), Strings, und zwei Arrays (String[10]).
Muß ich diese am Ende explizit "closen", "freen","destroyen" oder sonstwas?
Wieviele PrintWriter werden von der VM erzeugt ?
Sind am Ende alle wieder geschlossen und aus dem Speicher entfernt ?
Ich bin über jede Hilfe dankbar.
Habe den gleichen Text schon im Forum von java.de gehabt, leider ohne Erfolg :-(
Und nochwas : wie kann man vermeiden, SQL. con und res mit "null" zu initialisieren ?
Irgendwie finde ich das unschön.
Ich mach mir gerade mal ne kleine Webanwendung mit Tomcat.
Mein Problem ist, daß nach ca. 100 Aufrufen nur noch "out of memory"-Meldung im Browser kommt, und jstat -gcpermcapacity sagt mir, daß >80MB verbraten sind (PGC~PGCMX)
Die Seiten werden aus einer DB generiert.Ich vermute zwar, daß der Fehler nicht in verwaisten Connections liegt, aber trotzdem mal ein Beispiel:
Code:
private void someOutput(){
PrintWriter out = getWriter();
Statement SQL = null;
ResultSet res = null;
Connection con = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
}
catch (Exception e)
{
out.println(" Database-error : "+e.toString()+"");
}
try
{
String query = -die Abfrage eben -
con = DriverManager.getConnection("jdbc:mysql:-path-?user=-username-&password=-passwort-");
SQL = con.createStatement();
res = SQL.executeQuery(query);
res.first();
out.println(res.getString();
}catch(Exception e){out.println(e.toString());}
finally{
try { if (res != null) res.close(); } catch(Exception e){}
try { if (SQL != null) SQL.close(); } catch(Exception e){}
try { if (con != null) con.close(); } catch(Exception e){}
}
}
Wenn hier was falsch ist, lasse ich mich gern belehren.
Der grobe Aufbau der Seite ist wie folgt:
Code:
public class mainPage extends HttpServlet{
// Globale Variablen
PrintWriter gwriter;
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException{
PrintWriter out=res.getWriter();
res.setContentType("text/html");
setWriter(out);
header();
page();
footer();
out.close();
this.destroy();
}
private void setWriter(PrintWriter out){
gwriter = out;
}
private PrintWriter getWriter(){
return gwriter;
}
}
header, page, footer entsprechen vom Aufbau her o.g. someOutput.
Zusätzlich nutze ich noch eine Hand voll Variablen für Zähler (int), Strings, und zwei Arrays (String[10]).
Muß ich diese am Ende explizit "closen", "freen","destroyen" oder sonstwas?
Wieviele PrintWriter werden von der VM erzeugt ?
Sind am Ende alle wieder geschlossen und aus dem Speicher entfernt ?
Ich bin über jede Hilfe dankbar.
Habe den gleichen Text schon im Forum von java.de gehabt, leider ohne Erfolg :-(
Und nochwas : wie kann man vermeiden, SQL. con und res mit "null" zu initialisieren ?
Irgendwie finde ich das unschön.