On Tue, 9 Nov 2021 00:31:36 GMT, Brent Christian <bchri...@openjdk.org> wrote:

>> A cleaner can/should be shared within some scope and purpose, in this case 
>> the example class .
>> Each cleaner has a dedicated Thread so its not a lightweight object and 
>> should not be proliferated.
>> (Loom may be able to use Virtual Threads).
>> 
>> The reasons to not share are a Cleaner are based on possible interference 
>> between the cleanup callbacks.
>> If they share a thread and are non-trivial, it might slow other cleaners. If 
>> the cleaner is created and shared
>> for a particular purpose it will share the thread resource and still be 
>> efficient.
>
> The new example Cleaner instance _is_ shared, though on a pretty small scale 
> (just among instances of CleaningExample).  A demonstration of larger scale 
> sharing of a Cleaner instance would be out of scope for this example.

Let me add, why I have raised this issue.

I was going to migrate some older code which uses the `finalize()` method to 
the `Cleaner` mechanism. New it it, there seemed to be two pitfalls:

1. Understanding the whole "don't capture an instance reference in your state 
object"
2. Copying the example (which was in a non-working state, due to pseudo code) 
and making it work for me

With the improvement suggestions, I was trying help people who *only* read the 
code sample (many do), to become aware of 1. and help them getting going with 
2, simply because it's something they can copy and run.

-------------

PR: https://git.openjdk.java.net/jdk/pull/6076

Reply via email to