Time to retire System.runFinalizersOnExit?

Martin Buchholz martinrb at google.com
Tue Jan 27 22:07:50 UTC 2015


I was referring to
http://code.google.com/p/guava-libraries/source/browse/guava-testlib/src/com/google/common/testing/GcFinalization.java
which I occasionally advertise here.
(but it's intended to be used for testing...)

On Tue, Jan 27, 2015 at 2:00 PM, Peter Levart <peter.levart at gmail.com>
wrote:

>
> On 01/27/2015 09:55 PM, Martin Buchholz wrote:
>
> If you want to ensure something is run before VM exit, add a shutdown
> hook.
>
> If you really want to run all the finalizers, you can always run a variant
> of GcFinalization in your shutdown hook, although as always running during
> shutdown increases the risk greatly.
>
>
> What do you mean by "GcFinalization" ?
>
> When shutdown hooks run, there can be objects with finalize methods that
> are still reachable from GC roots, so they are not pending finalization
> yet. Invoking System.gc() and System.runFinalization() would not run
> finalizers for them. runFinalizersOnExit on the other hand, run the
> finalizers for all objects with finalize methods regardles of their
> "pending" status. This is dangerous of course. Even more than normal
> finalization. But there's no public API for that after runFinalizersOnExit
> is removed.
>
> Practically, I think this only potentially affects environments where VM
> is embedded in a process that keeps running when a particular instance of
> VM already exits.
>
> Peter
>
>
> On Tue, Jan 27, 2015 at 6:48 AM, Peter Levart <peter.levart at gmail.com>
> wrote:
>
>> On 01/27/2015 01:54 PM, Peter Levart wrote:
>>
>>> A poor-man's escape hatch is a shutdown hook that calls
>>> System.runFinalization(). Which might interfere with other shutdown hooks
>>> that run concurrently (runFinalizersOnExit runs finalizers after all
>>> shutdown hooks are finished).
>>>
>>
>>  Not really. This only runs finalizers for Objects pending finalization,
>> while runFinalizersOnExit runs it for all Objects with finalize() methods
>> that have not been invoked yet. A big difference. So there's no alternative
>> if this method is removed.
>>
>> Peter
>>
>>
>
>



More information about the core-libs-dev mailing list