RFR JDK-8185582, Update Zip implementation to use Cleaner, not finalizers
mandy chung
mandy.chung at oracle.com
Mon Oct 30 23:25:00 UTC 2017
On 10/30/17 1:49 PM, Peter Levart wrote:
>
> ...above example lends itself as a use case for the following
> equivalent alternative using internal low-level API where ZStreamRef
> becomes the Cleanable itself:
>
> class ZStreamRef extends PhantomCleanable<Object> {
>
> private final LongConsumer end;
> private volatile long address;
>
> ZStreamRef (Object referent, LongSupplier init, LongConsumer end) {
> // here the registration MUST happen as 1st thing - enforced
> by javac
> super(referent, CleanerFactory.cleaner());
> this.end = end;
> this.address = init.getAsLong();
> }
>
> long address() {
> return address;
> }
>
> @Override
> protected void performCleanup() {
> long addr = address;
> address = 0;
> if (addr != 0) {
> end.accept(addr);
> }
> }
> }
>
I was thinking something along this line what could ensure the
"cleanable" object is allocated before allocating the resources that the
cleanable is responsible for clean up. I think it'd be a good RFE to
improve the Cleaner API to address the OOM case.
Mandy
More information about the core-libs-dev
mailing list