RFR: JDK-8273902: Memory leak in OopStorage due to bug in OopHandle::release()
David Holmes
david.holmes at oracle.com
Thu Sep 16 23:38:49 UTC 2021
Hi Volker,
Please note that non-trivial fixes should wait ~24hrs before integration
to ensure a range of folk have an opportunity to comment.
Thanks,
David
On 17/09/2021 5:59 am, Volker Simonis wrote:
> On Thu, 16 Sep 2021 19:27:40 GMT, Coleen Phillimore <coleenp at 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.
>>
>> Yes, please backport. Thank you for fixing this.
>
> @coleenp, @sspitsyn thanks for the quick review!
>
> -------------
>
> PR: https://git.openjdk.java.net/jdk/pull/5549
>
More information about the serviceability-dev
mailing list