Received: from ns.sharemation.com (d83b57e4.dsl.flashcom.net [216.59.87.228]) by mail.postgresql.org (8.11.1/8.11.1) with ESMTP id eBQKURL55010; Tue, 26 Dec 2000 15:30:27 -0500 (EST) (envelope-from barry@xythos.com) Received: from xythos.com (IDENT:blind@frog.xythos.com [192.168.254.110]) by ns.sharemation.com (8.9.3/8.8.7) with ESMTP id MAA05687; Tue, 26 Dec 2000 12:19:55 -0800 Message-ID: <3A49032E.BBD063FF@xythos.com> Date: Tue, 26 Dec 2000 12:44:30 -0800 From: Barry Lind X-Mailer: Mozilla 4.76 [en] (X11; U; Linux 2.2.16-22smp i686) X-Accept-Language: en MIME-Version: 1.0 To: pgsql-patches@postgresql.org CC: pgsql-interfaces@postgresql.org Subject: Two minor fixes to reduce resource usage in JDBC drivers Content-Type: multipart/mixed; boundary="------------71BCE3CF3933750F7E9D1D9B" X-Archive-Number: 200012/218 X-Sequence-Number: 564 This is a multi-part message in MIME format. --------------71BCE3CF3933750F7E9D1D9B Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Attached are patches for two fixes to reduce memory usage by the JDBC drivers. The first fix fixes the PreparedStatement object to not allocate unnecessary objects when converting native types to Stings. The old code used the following format: (new Integer(x)).toString() whereas this can more efficiently be occompilshed by: Integer.toString(x); avoiding the unnecessary object creation. The second fix is to release some resources on the close() of a ResultSet. Currently the close() method on ResultSet is a noop. The purpose of the close() method is to release resources when the ResultSet is no longer needed. The fix is to free the tuples cached by the ResultSet when it is closed (by clearing out the Vector object that stores the tuples). This is important for my application, as I have a cache of Statement objects that I reuse. Since the Statement object maintains a reference to the ResultSet and the ResultSet kept references to the old tuples, my cache was holding on to a lot of memory. thanks, --Barry --------------71BCE3CF3933750F7E9D1D9B Content-Type: text/plain; charset=UTF-8; name="patch.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="patch.diff" *** ./org/postgresql/jdbc1/PreparedStatement.java.orig Tue Dec 26 11:50:03 2000 --- ./org/postgresql/jdbc1/PreparedStatement.java Tue Dec 26 11:15:52 2000 *************** *** 164,170 **** */ public void setByte(int parameterIndex, byte x) throws SQLException { ! set(parameterIndex, (new Integer(x)).toString()); } /** --- 164,170 ---- */ public void setByte(int parameterIndex, byte x) throws SQLException { ! set(parameterIndex, Integer.toString(x)); } /** *************** *** 177,183 **** */ public void setShort(int parameterIndex, short x) throws SQLException { ! set(parameterIndex, (new Integer(x)).toString()); } /** --- 177,183 ---- */ public void setShort(int parameterIndex, short x) throws SQLException { ! set(parameterIndex, Integer.toString(x)); } /** *************** *** 190,196 **** */ public void setInt(int parameterIndex, int x) throws SQLException { ! set(parameterIndex, (new Integer(x)).toString()); } /** --- 190,196 ---- */ public void setInt(int parameterIndex, int x) throws SQLException { ! set(parameterIndex, Integer.toString(x)); } /** *************** *** 203,209 **** */ public void setLong(int parameterIndex, long x) throws SQLException { ! set(parameterIndex, (new Long(x)).toString()); } /** --- 203,209 ---- */ public void setLong(int parameterIndex, long x) throws SQLException { ! set(parameterIndex, Long.toString(x)); } /** *************** *** 216,222 **** */ public void setFloat(int parameterIndex, float x) throws SQLException { ! set(parameterIndex, (new Float(x)).toString()); } /** --- 216,222 ---- */ public void setFloat(int parameterIndex, float x) throws SQLException { ! set(parameterIndex, Float.toString(x)); } /** *************** *** 229,235 **** */ public void setDouble(int parameterIndex, double x) throws SQLException { ! set(parameterIndex, (new Double(x)).toString()); } /** --- 229,235 ---- */ public void setDouble(int parameterIndex, double x) throws SQLException { ! set(parameterIndex, Double.toString(x)); } /** *** ./org/postgresql/jdbc1/ResultSet.java.orig Tue Dec 26 11:50:03 2000 --- ./org/postgresql/jdbc1/ResultSet.java Tue Dec 26 11:22:41 2000 *************** *** 127,133 **** */ public void close() throws SQLException { ! // No-op } /** --- 127,134 ---- */ public void close() throws SQLException { ! //release resources held (memory for tuples) ! rows.setSize(0); } /** *** ./org/postgresql/jdbc2/PreparedStatement.java.orig Tue Dec 26 11:50:04 2000 --- ./org/postgresql/jdbc2/PreparedStatement.java Tue Dec 26 11:14:33 2000 *************** *** 164,170 **** */ public void setByte(int parameterIndex, byte x) throws SQLException { ! set(parameterIndex, (new Integer(x)).toString()); } /** --- 164,170 ---- */ public void setByte(int parameterIndex, byte x) throws SQLException { ! set(parameterIndex, Integer.toString(x)); } /** *************** *** 177,183 **** */ public void setShort(int parameterIndex, short x) throws SQLException { ! set(parameterIndex, (new Integer(x)).toString()); } /** --- 177,183 ---- */ public void setShort(int parameterIndex, short x) throws SQLException { ! set(parameterIndex, Integer.toString(x)); } /** *************** *** 190,196 **** */ public void setInt(int parameterIndex, int x) throws SQLException { ! set(parameterIndex, (new Integer(x)).toString()); } /** --- 190,196 ---- */ public void setInt(int parameterIndex, int x) throws SQLException { ! set(parameterIndex, Integer.toString(x)); } /** *************** *** 203,209 **** */ public void setLong(int parameterIndex, long x) throws SQLException { ! set(parameterIndex, (new Long(x)).toString()); } /** --- 203,209 ---- */ public void setLong(int parameterIndex, long x) throws SQLException { ! set(parameterIndex, Long.toString(x)); } /** *************** *** 216,222 **** */ public void setFloat(int parameterIndex, float x) throws SQLException { ! set(parameterIndex, (new Float(x)).toString()); } /** --- 216,222 ---- */ public void setFloat(int parameterIndex, float x) throws SQLException { ! set(parameterIndex, Float.toString(x)); } /** *************** *** 229,235 **** */ public void setDouble(int parameterIndex, double x) throws SQLException { ! set(parameterIndex, (new Double(x)).toString()); } /** --- 229,235 ---- */ public void setDouble(int parameterIndex, double x) throws SQLException { ! set(parameterIndex, Double.toString(x)); } /** *** ./org/postgresql/jdbc2/ResultSet.java.orig Tue Dec 26 11:50:04 2000 --- ./org/postgresql/jdbc2/ResultSet.java Tue Dec 26 11:22:46 2000 *************** *** 128,134 **** */ public void close() throws SQLException { ! // No-op } /** --- 128,135 ---- */ public void close() throws SQLException { ! //release resources held (memory for tuples) ! rows.setSize(0); } /** --------------71BCE3CF3933750F7E9D1D9B--