Memroy leak with jdbc - Mailing list pgsql-jdbc

From Joseph Shraibman
Subject Memroy leak with jdbc
Date
Msg-id 3EB6F489.8030901@selectacast.net
Whole thread Raw
Responses Re: Memroy leak with jdbc
Re: Memroy leak with jdbc
Re: Memroy leak with jdbc
List pgsql-jdbc
Using this test case with 9000 interations I get this output:

used: 474,296 free: 1,557,320 total: 2,031,616 max: 67,108,864
....................................................................................................
used: 4,646,760 free: 3,643,544 total: 8,290,304 max: 67,108,864
=================
used: 4,607,728 free: 3,682,576 total: 8,290,304 max: 67,108,864

I have no idea why this memory leak is happening. It only happens with this one select
statement, not all select statements.


/**
  * PostgresMemTest.java
  *
  *
  * Created: Mon May  5 18:40:29 2003
  *
  * @author <a href="mailto:jks@selectacast.net">Joseph Shraibman</a>
  * @version 1.0
  */
import java.sql.*;
public class PostgresMemTest {

  transient protected Connection  db;

     public PostgresMemTest(String url,String usr,String pwd) throws Exception{

         // try {
             // Load the driver
             Class.forName("org.postgresql.Driver");
             // } catch (ClassNotFoundException e){
             // e.printStackTrace();
             //return;
             //}
             // try{
             db = DriverManager.getConnection(url, usr, pwd);
             // } catch  (SQLException e){
             //e.printStackTrace();
             //return;
             // }
             Statement st = null;
             st = db.createStatement();
             st.executeUpdate("BEGIN;");
             st.executeUpdate("create temp table taba(pkey int, puindex int);");
             st.executeUpdate("create temp table tabpu(pukey int,  ukey int, pu text);");
             st.executeUpdate("create temp table tabu(ukey int, akey int);");
             st.executeUpdate("insert into taba values(1,2);");
             st.executeUpdate("insert into tabu values(3,1);");
             st.executeUpdate("insert into tabpu values(2,3,'blah');");

     } // PostgresMemTest constructor
     void doQuery() throws Exception{
         String line = null;
         //None of these remmed out lines produce the memory leak
         //line = "SELECT 'blah'";
         //line = "SELECT (SELECT 'blah');";
         //line = "select pu from tabpu where pukey = 2 and ukey = 3";
         line = "select (select pu from tabpu where pukey = taba.puindex and ukey =
tabu.ukey) from tabu where ukey = 3 and akey = 1;";
         Statement st = null;
         st = db.createStatement();
         ResultSet rs = st.executeQuery(line);

     }
     private static String uft(){
         Runtime rt = Runtime.getRuntime();
         long free = rt.freeMemory(), total = rt.totalMemory(), used =  total - free;
         long max = rt.maxMemory();
         long max2 = max - 67108864;

         java.text.NumberFormat nf = java.text.NumberFormat.getInstance() ;
         return "used: "+nf.format(used)+" free: "+nf.format(free)+
             " total: "+nf.format(total)+" max: "+nf.format(max2);
     }
     //Usage java PostgresMemTest <iterations> <url> <username> <passwd>
     public static void main(String args[])throws Exception{
         PostgresMemTest pmt = new PostgresMemTest(args[1],args[2],args[3]);
         System.out.println(uft());
         int times = Integer.parseInt(args[0]);
         final int perc = times/100;
         for(int i = 0; i < times; i++){
             pmt.doQuery();
             if (i % perc == 0){
                 System.out.print('.');
                 System.out.flush();
             }
         }
         System.out.println();
         System.out.println(uft());
         System.gc();
         System.gc();
         System.gc();
         System.out.println("=================");
         System.out.println(uft());

     }
} // PostgresMemTest




--
Joseph Shraibman
joseph@xtenit.com
Increase signal to noise ratio.  http://xis.xtenit.com


pgsql-jdbc by date:

Previous
From: Devrim GUNDUZ
Date:
Subject: Memory footprint for a single connection
Next
From: Joseph Shraibman
Date:
Subject: Re: Memroy leak with jdbc