On Thu, 16 Sep 2021 19:27:40 GMT, Coleen Phillimore <cole...@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