RFR: 8255987: JDI tests fail with com.sun.jdi.ObjectCollectedException [v2]
Per Liden
pliden at openjdk.java.net
Tue Dec 8 14:07:14 UTC 2020
On Mon, 7 Dec 2020 23:34:00 GMT, Chris Plummer <cjplummer at openjdk.org> wrote:
>> I don't follow your reasoning here Chris. All ObjectReferences can be GC'd at any time unless GC has been disallowed. So a reference create via newInstance is no different to any other reference. If it is currently reachable then instances() should return it. Are you treating "reachable for the purposes of garbage collection" as-if it said "strongly reachable"? It doesn't so I think you are reading too much into this. I think there is a lot of flexibility in this API in terms of what it may return regarding weak references.
>
> I read "reachable for the purposes of garbage collection" as not including objects reachable only via weak reference. So if the only reference to an object is a weak reference, which is normally what you have after calling `ClassType.newInstance()`, then the object is not considered reachable. At the very least, his is how `ReferenceType.instances()` is implemented, and is based on JVMTI [FollowReferences](https://docs.oracle.com/en/java/javase/14/docs/specs/jvmti.html#FollowReferences)().
>
> So given that, the expectation would be that an object returned `ClassType.newInstance()` would not be counted by `ReferenceType.instances()` unless something is done to add a strong reference to the object, such as calling `ObjectReference.disableCollection()`. Now with Per's changes a strong reference is also created with doing a VM.suspend(). The test doesn't expect this behavior, and it's understandable why.
I think we're still within what the spec says, given that the wording is so loose. But it's hard to tell if this change will be problematic for some use case.
-------------
PR: https://git.openjdk.java.net/jdk/pull/1595
More information about the serviceability-dev
mailing list