RFR: JDK-8276422 Add command-line option to disable finalization

Stuart Marks smarks at openjdk.java.net
Thu Nov 18 05:22:35 UTC 2021


On Thu, 18 Nov 2021 04:13:21 GMT, Jaikiran Pai <jpai at openjdk.org> wrote:

>> Pretty much what it says. The new option controls a static member in InstanceKlass that's consulted to determine whether the finalization machinery is activated for instances when a class is loaded. A new native method is added so that this state can be queried from Java. This is used to control whether a finalizer thread is created and to disable the `System` and `Runtime::runFinalization` methods. Includes tests for the above.
>
> src/java.base/share/classes/java/lang/ref/Finalizer.java line 195:
> 
>> 193: 
>> 194:     static {
>> 195:         if (Holder.ENABLED) {
> 
> Hello Stuart,
> My understanding of the the lazy `Holder` is that it's there to delay the static initialization of the code that's part of the `Holder`. In this case here, the `Holder` is being used right within the `static` block of the `Finalizer` class, that too as the first thing. In this case, is that `Holder` class necessary?

Huh, good catch! This was mostly left over from an earlier version of the flag that used system properties, which aren't initialized until after the Finalizer class is initialized.

It might be the case that the Holder can be removed at this point, since the finalization-enabled bit is no longer in a system property and is in a native class member that should be available before the VM is started.

I say "might" though because this occurs early in system startup, and weird things potentially happen. For example, suppose the first object with a finalizer is created before the Finalizer class is initialized. The VM will perform an upcall to Finalizer::register. An ordinary call to a static method will ensure the class is initialized before proceeding with the call, but this VM upcall is a special case.... I'll have to investigate this some more.

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

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



More information about the build-dev mailing list