On 01/02/2022 09:11, Anton Kozlov wrote:
Cross-posting RFR from CRaC Project. The change touches Reference class, so I
would be glad to receive any feedback from core-libs-dev.

In CRaC project, java code participates in the preparation of the platform state that can be safely stored to the image. The image can be attempted at any time, so the image may capture unprocessed References. Recently I found cases when objects became unreachable during preparation for the checkpoint, and their associated clean-up actions to close external resources (which we don't allow open when the image is stored). So it's become necessary to ensure as many References as possible are processed before the image is created. As a nice additional feature, restored java instances won't start with the same
Reference processing.

With the change, the image is not created until VM's queue of pending
j.l.References are drained, and then, as an example, each j.l.ref.Cleaner queue is drained, only then the VM is called to prepare the image. More Reference handling threads will be changed like Cleaner's ones. I'm looking for possible
problems or general comments about this approach.

At a high level it should be okay to provide a JDK-internal way to await quiescent. You've added it as a public API which might be okay for the current exploration but I don't think it would be exposed in its current form. Once the method returns then there is no guarantee that the number of waiters hasn't changed, but I think you know that.

-Alan.

Reply via email to