On Thu, 16 Sep 2021 16:08:39 GMT, Volker Simonis <simo...@openjdk.org> wrote:

> Currently, `OopHandle::release()` is implemented as follows:
> 
> inline void OopHandle::release(OopStorage* storage) {
>   if (peek() != NULL) {
>     // Clear the OopHandle first
>     NativeAccess<>::oop_store(_obj, (oop)NULL);
>     storage->release(_obj);
>   }
> }
> 
> However, peek() returns NULL not only if the oop* `_obj` is NULL, but also 
> when `_obj` points to a zero oop. In the latter case, the oop* `_obj` will 
> not be released from the corresponding OopStorage and the slot it occupies 
> will remain alive forever.
> 
> This behavior can be easily triggered with the `LeakTestMinimal.java` test 
> which is attached to the [JBS 
> issue](https://bugs.openjdk.java.net/browse/JDK-8273902)(thanks to Oli 
> Gillespie from the Amazon Profiler team for detecting the issue and providing 
> a reproducer).
> 
> This fix should probably also be downported to jdk17 as quickly as possible.

Hi Volker,
Nice discovery! 
LGTM
Thanks,
Serguei

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

Marked as reviewed by sspitsyn (Reviewer).

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

Reply via email to