Re: memory management
- From: Daniel Pitts <newsgroup.spamfilter@xxxxxxxxxxxxxxxxxxx>
- Date: Wed, 31 Oct 2007 10:03:34 -0700
josh wrote:
On 31 Ott, 11:32, Thomas Kellerer <YQDHXVLMU...@xxxxxxxxxxxxx> wrote:Specifically, look into a logging framework. log4j, commons-logging, or even the Java Logging API. They are designed for this type of logging. Log4j seems to be the most popular, and might as well be standard, commons-logging is a facade that lets you basically plug in whatever type of logging system you choose (such as log4j or Java Logging), and Java Logging comes standard.josh, 31.10.2007 11:14:
On 31 Ott, 10:56, Thomas Kellerer <YQDHXVLMU...@xxxxxxxxxxxxx> wrote:After a quick look, I'd say the following lines are your problem:josh, 31.10.2007 10:22:ok I post the code:Hi, I have the following problem:My guess is that you are buffering the retrieved rows somehow (or
in a while loop I get from a db some records and in the same time
I put them with an insert preparedStatement in
a destination db but the jave process increase the memory until it
goes in out of memory.
How can I optimize that? also If I increase Tomcat java memory when I
process more than 500 records
tha java memory is already at 700mb of usage!
keeping references to them). You will need to show us your code.
Thomas
st_from = conn.createStatement();
rs_from = st_from.executeQuery(query_from);
ps_into = conn_t.prepareStatement(insert_into);
int i_out_record = 0;
int i_in_record = 0;
while(rs_from.next())
{
i_out_record++;
out_record += "SELECT su record (" + i_out_record + ")";
in_record += "INSERT su record (";
row_error = rs_from.getString(campi_from[0]); // se errore su quale
id
for(int i=0; i < campi_from.length; i++)
{
out_record += campi_from[i] + "=" +
rs_from.getString(campi_from[i]) + "::" ;
ps_into.setString(i+1, rs_from.getString(campi_from[i])); //
prepara l'insert
in_values += campi_to[i] + "=" + rs_from.getString(campi_from[i])
+ "::" ;
}
out_record = out_record.substring(0, out_record.length()-2); //
tolgo il cancelletto finale
int res = ps_into.executeUpdate();
if(res != 0)
{
i_in_record++;
in_record += i_in_record + ")" + in_values;
// chiudi la statement
//ps_into.close();
}
out_record += "\n";
in_record += "\n";
/*
if(i_out_record > 10)
break;
*/
}
String log = "Per la tabella origine " + tabellaFrom + " processati
in uscita record: " + i_out_record + "\n";
log += "Per la tabella destinazione " + tabellaTo + " processati in
entrata record: " + i_in_record + "\n";
log += "-----------------------------------------------------------
\n";
log += out_record + in_record;
//out.print(st);
out.print(log);
>out_record += "SELECT su record (" + i_out_record + ")";
>in_record += "INSERT su record (";
>in_record += i_in_record + ")" + in_values;
As far as I can tell, this will create huge strings with the complete
result set, as they are declared outside the loop (actually twice the
result set because one for the out_Record and one for the in_record).
Thomas
Great, the problem was not in the resultset but in my logging string!
so I by-pass
that saving storing in the DB only errors cathed...
.... if I had to save, however, some logs may be I could use files ...
never string does it right?
Thanks for the help!
--
Daniel Pitts' Tech Blog: <http://virtualinfinity.net/wordpress/>
.
- References:
- memory management
- From: josh
- Re: memory management
- From: Thomas Kellerer
- Re: memory management
- From: josh
- Re: memory management
- From: Thomas Kellerer
- Re: memory management
- From: josh
- memory management
- Prev by Date: Re: So, how many of you just got betrayed by Apple
- Next by Date: Re: How to test a class that is started via a Servlet.
- Previous by thread: Re: memory management
- Next by thread: Re: memory management
- Index(es):
Relevant Pages
|