On Thu, 16 Sep 2021 19:27:40 GMT, Coleen Phillimore <[email protected]> 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.
>
> Yes, please backport. Thank you for fixing this.
@coleenp, @sspitsyn thanks for the quick review!
-------------
PR: https://git.openjdk.java.net/jdk/pull/5549