RFR(S) 8230956: Should disable Escape Analysis when JVMTI capability can_tag_objects is taken
Vladimir Kozlov
vladimir.kozlov at oracle.com
Tue Sep 24 22:37:49 UTC 2019
can_tag_objects is "always" capability.
If it is true then EA will be disabled in all cases when JVMTI agent is used. It is too broad.
Am I missing something?
Thanks,
Vladimir
On 9/13/19 7:12 AM, Reingruber, Richard wrote:
> Hi,
>
> could I please get reviews for
>
> Webrev: http://cr.openjdk.java.net/~rrich/webrevs/2019/8230956/webrev.0/
> Bug: https://bugs.openjdk.java.net/browse/JDK-8230956
>
> JVMTI provides functions to follow references beginning at the roots of the object graph and it
> provides functions to iterate all objects on the heap[1][2]. These functions are means to access
> objects which are otherwise local to a Java thread. In terms of escape analysis these local objects
> escape through these JVMTI functions invalidating optimizations based on escape analysis.
>
> Example:
>
> - Let J be a JavaThread that calls a compiled method M with a NoEscape instance I of class C that is
> scalar replaced.
>
> - JVMTI agent A uses JVMTI FollowReferences() to iterate the objects in the object graph tagging all
> instances of C.
>
> - A uses GetObjectsWithTags() to retrieve the tagged instances of C.
>
> - Error: I is missing because its allocation was eliminated / scalar replaced.
>
> Agents are required to possess the capability can_tag_objects in order to call the JVMTI heap
> functions that let objects escape. Currently it is not possible to revert EA based optimizations
> just before objects escape through JVMTI therefore escape analysis should be disabled as soon as the
> JVMTI capability can_tag_objects is taken.
>
> But this is not sufficient, because there may be compiled frames on stack with EA based
> optimizations when a JVMTI agent takes can_tag_objects (see included exclusive test cases), and then
> it does not help to disable escape analysis or invalidate compiled methods with ea based
> optimizations. In general it is still an improvement to do so. JDK-8227745 would be a complete
> solution to the issue.
>
> An further improvement could be to invalidate methods compiled by c2 when can_tag_objects gets
> added, but I'd rather suggest to integrated the implementation for JDK-8227745. Note also that after
> calling JVMTI AddCapabilities(), even with an empty set of capabilities,
> JvmtiExport::can_walk_any_space() will return true.
>
> I've run tier1 tests.
>
> Thanks, Richard.
>
> [1] https://docs.oracle.com/en/java/javase/11/docs/specs/jvmti.html#Heap
> [2] https://docs.oracle.com/en/java/javase/11/docs/specs/jvmti.html#Heap_1_0
>
More information about the serviceability-dev
mailing list