Re: Re: RE: [ADMIN] High memory usage [PATCH]

Поиск
Список
Период
Сортировка
От Gunnar Rønning
Тема Re: Re: RE: [ADMIN] High memory usage [PATCH]
Дата
Msg-id m2lmmfus0n.fsf@smaug.polygnosis.com
обсуждение исходный текст
Ответ на Re: Re: RE: [ADMIN] High memory usage [PATCH]  (Michael Stephenson <mstephenson@tirin.openworld.co.uk>)
Ответы Re: Re: RE: [ADMIN] High memory usage [PATCH]  (Michael Stephenson <mstephenson@tirin.openworld.co.uk>)
Список pgsql-jdbc
* Michael Stephenson <mstephenson@tirin.openworld.co.uk> wrote:
|
| I've just ran a couple of hugely simplified test (basically starting a
| couple of thousand threads doing sdf.parse() with either synchronization
| or ThreadLocals a couple of times).
|

I agree that the tests are pretty inconclusive. We need something that
simulates real usage better. What platform are you testing on Linux ?
If so with native threads or green threads ?

|
| I personally would advocate applying a patch similar to below to the
| current cvs source.
|

This I don't understand, was your intention to remove thread safety with this
patch ? Looking at the way you introduce SimpleDateFormat as an instance
variable it seems so.



| Michael xxx
|
| --- PreparedStatement.java.orig    Tue Jun 26 16:11:16 2001
| +++ PreparedStatement.java    Tue Jun 26 16:16:26 2001
| @@ -44,6 +44,9 @@
|          private static ThreadLocal tl_df   = new ThreadLocal(); // setDate() SimpleDateFormat
|          private static ThreadLocal tl_tsdf = new ThreadLocal(); // setTimestamp() SimpleDateFormat
|
| +        private SimpleDateFormat sdSdf; // setDate SimpleDateFormat
| +        private SimpleDateFormat stSdf; // setTimeStamp SimpleDateFormat
| +
|      /**
|       * Constructor for the PreparedStatement class.
|       * Split the SQL statement into segments - separated by the arguments.
| @@ -65,13 +68,18 @@
|          this.sql = sql;
|          this.connection = connection;
|
| -        // might just as well create it here, so we don't take the hit later
|
| -                SimpleDateFormat df = new SimpleDateFormat("''yyyy-MM-dd''");
| -                tl_df.set(df);
| -
| -                df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
| -                tl_tsdf.set(df);
| +        // set up our SimpleDateFormats
| +                sdSdf = (SimpleDateFormat)tl_df.get();
| +        if (sdSdf == null) {
| +            sdSdf = new SimpleDateFormat("''yyyy-MM-dd''");
| +            tl_df.set(sdSdf);
| +        }
| +        stSdf = (SimpleDateFormat)tl_tsdf.get();
| +        if (stSdf == null) {
| +            stSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
| +            tl_tsdf.set(df);
| +        }
|
|          for (i = 0; i < sql.length(); ++i)
|          {
| @@ -95,17 +103,6 @@
|              templateStrings[i] = (String)v.elementAt(i);
|      }
|
| -        /**
| -         * New in 7.1 - overides Statement.close() to dispose of a few local objects
| -         */
| -        public void close() throws SQLException
| -     {
| -          // free the ThreadLocal caches
| -          tl_df.set(null);
| -      tl_tsdf.set(null);
| -          super.close();
| -        }
| -
|      /**
|       * A Prepared SQL query is executed and its ResultSet is returned
|       *
| @@ -342,9 +339,7 @@
|       */
|      public void setDate(int parameterIndex, java.sql.Date x) throws SQLException
|      {
| -          SimpleDateFormat df = (SimpleDateFormat) tl_df.get();
| -
| -      set(parameterIndex, df.format(x));
| +      set(parameterIndex, sdSdf.format(x));
|
|        // The above is how the date should be handled.
|        //
| @@ -381,13 +376,13 @@
|       */
|      public void setTimestamp(int parameterIndex, Timestamp x) throws SQLException
|          {
| -          SimpleDateFormat df = (SimpleDateFormat) tl_tsdf.get();
| -          df.setTimeZone(TimeZone.getTimeZone("GMT"));
| +          stSdf.setTimeZone(TimeZone.getTimeZone("GMT"));
|
|            // Use the shared StringBuffer
|            synchronized(sbuf) {
|              sbuf.setLength(0);
| -            sbuf.append("'").append(df.format(x)).append('.').append(x.getNanos()/10000000).append("+00'");
| +            sbuf.append("'").append(stSdf.format(x)).append('.')
| +        .append(x.getNanos()/10000000).append("+00'");
|              set(parameterIndex, sbuf.toString());
|            }
|
|
|
|
| ---------------------------(end of broadcast)---------------------------
| TIP 2: you can get off all lists at once with the unregister command
|     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
|

--
Gunnar Rønning - gunnar@polygnosis.com
Senior Consultant, Polygnosis AS, http://www.polygnosis.com/

В списке pgsql-jdbc по дате отправления:

Предыдущее
От: "Dave Cramer"
Дата:
Сообщение: RE: Re: RE: [ADMIN] High memory usage [PATCH]
Следующее
От: "Dave Cramer"
Дата:
Сообщение: RE: RE: [ADMIN] High memory usage [PATCH]