Re: Remove usage of finalizers ?

From: Gavin Flower <GavinFlower(at)archidevsys(dot)co(dot)nz>
To: Péter Kovács <peter(dot)dunay(dot)kovacs(at)gmail(dot)com>, "Heiko W(dot) Rupp" <hwr(at)pilhuhn(dot)de>
Cc: Vitalii Tymchyshyn <vit(at)tym(dot)im>, List <pgsql-jdbc(at)postgresql(dot)org>
Subject: Re: Remove usage of finalizers ?
Date: 2013-10-21 09:45:12
Message-ID: 5264F7A8.3090800@archidevsys.co.nz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

From memory, finalizers are unreliable (there is no gaurantee, that
even in a normal situation, that they will be invoked), and _*other
methods*_ of tidying up loses ends should normally be employed.

I have never used finalizers, since I learnt Java 15 years ago.

Cheers,
Gavin

On 21/10/13 21:43, Péter Kovács wrote:
>
> A case in point demonstrating why finalizers are inherently
> useless/bad: unpredictability. I agree with the approach that they
> should be used only conditionally (such a in debug mode).
>
> Péter
>
> On Oct 21, 2013 10:07 AM, "Heiko W. Rupp" <hwr(at)pilhuhn(dot)de
> <mailto:hwr(at)pilhuhn(dot)de>> wrote:
>
>
> Am 21.10.2013 um 08:29 schrieb Vitalii Tymchyshyn:
>
> > Long finalized queue means that some of your objects finalizes
> long. This means that either you don't close some of your
> statements explicitly or you have different type
>
> Actually this is a false assumption. The finalizer daemon thread
> has a low priority and can sometimes
> not keep up with the most trivial cases. See e.g.
> http://www.fasterj.com/articles/finalizer1.shtml
>
> And yes, closing statements and other objects (e.g. LOBs)
> explicitly makes a lot of sense.
>
>
> > of objects (even if it's small number) that take long time to
> finalize. Check stack trace of finalized thread.
> > As of driver, removing finalize altogether is not good as
> statements won't be closing implicitly. Possible options are:
> > 1) Move processing out of finalizer thread with reference queues.
> > 2) Warn when something is implicitly closed to indicate usage
> problem.
>
> That is what I meant: have 2 drivers:
>
> - one for devlopment that does the warning in the finalizer and
> the closing, but very loud warning
> - one for production where the finalize() methods are gone.
>
> Again: there is no guarantee that a finalize() method is ever
> called from the JVM. So relying on
> it may create bogus results
>
> >
> > 20 жовт. 2013 23:33, користувач "Heiko W. Rupp" <hwr(at)pilhuhn(dot)de
> <mailto:hwr(at)pilhuhn(dot)de>> написав:
> > Hey,
> >
> > the other day we ran into a situation where our app ran into a
> OOME situation on heavy
> > load. It turned out that we had around 290k objects on the
> Finalizer queue, that
> > were Statements.
> >
> > There has been a discussion in the past about finalizers (
> > see e.g. around
> http://www.postgresql.org/message-id/BCD42993-CB7B-453F-95B4-09E84A956AB0@me.com
> ).
> >
> > I understand that Connection objects are supposed implement a
> finalizer (is that actually true?),
> > but here the penalty is not that high, as Connections usually
> are pooled and are thus long living.
> >
> > Other JDBC objects like Statements are extremely short lived and
> the creation rate can be
> > on a busy application much higher than the finalization rate
> (which is what we were seeing).
> >
> > So I wonder if the driver could be rewritten in a way that either
> > - uses no finalizers for the short lived objects
> > or
> > - exist in 2 flavors: a debug version that does excessive
> logging in the
> > finalizer if the objects were not yet closed (and stays as is
> wrt the extra work)
> > and a production version where
> > the finalize() methods are removed, so that the objects do not
> end up
> > in the finalizer queue and can't pile up under high load.
> >
> > Developers could then use the devel version and the other driver
> for production.
> >
> > Relying on the finalize() method to close/free objects on the PG
> server is a bad
> > idea anyway, as there is no guarantee when finalizers run or if
> they run at all.
> >
> > Thanks
> > Heiko
> >
> >
> > --
> > Heiko Rupp hwr(at)pilhuhn(dot)de <mailto:hwr(at)pilhuhn(dot)de>
> > Blog: http://pilhuhn.blogspot.com @pilhuhn
> >
> >
> >
> > --
> > Sent via pgsql-jdbc mailing list (pgsql-jdbc(at)postgresql(dot)org
> <mailto:pgsql-jdbc(at)postgresql(dot)org>)
> > To make changes to your subscription:
> > http://www.postgresql.org/mailpref/pgsql-jdbc
>
> --
> Heiko Rupp hwr(at)pilhuhn(dot)de <mailto:hwr(at)pilhuhn(dot)de>
> Blog: http://pilhuhn.blogspot.com @pilhuhn
>
>
>
> --
> Sent via pgsql-jdbc mailing list (pgsql-jdbc(at)postgresql(dot)org
> <mailto:pgsql-jdbc(at)postgresql(dot)org>)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-jdbc
>

In response to

Browse pgsql-jdbc by date

  From Date Subject
Next Message Heiko W. Rupp 2013-10-21 10:09:54 Re: Remove usage of finalizers ?
Previous Message Vitalii Tymchyshyn 2013-10-21 09:34:12 Re: Remove usage of finalizers ?