RFR: 8269592: [JVMCI] Optimize c2v_iterateFrames

Dean Long dlong at openjdk.java.net
Fri Jul 9 03:51:51 UTC 2021


On Tue, 29 Jun 2021 17:26:58 GMT, Andreas Woess <aw at openjdk.org> wrote:

> Several smaller optimizations and cleanups to JVMCI's iterateFrames:
> * Restructure the iterateFrames method for better readability and maintenance, with some parts extracted to helper functions.
> * Use vframeStream as the iterator for faster iteration in case not every vframe matches the method filter, so we can avoid creating javaVFrames for skipped vframes. We use vframeStream::asJavaVFrame() to get the current javaVFrame.
> * Extended vframeStream::asJavaVFrame() to also work with native frames, so that it works with all java frames returned by vframeStream. This way, native compiledVFrames will just work and do not need extra handling.
> Test coverage is provided via a newly added iterateFrames jtreg test that includes a JNI call on the stack.
> * Added two trivial getters to vframeStream: vframe_id() and decode_offset().
> These are used together with compiledVFrame::at_scope() to avoid going through vframeStream::asJavaVFrame() and recreating the scope objects for every matched inlined vframe of a compiled frame which would be more expensive than using javaVFrame::sender() (that shares the scope object pool).
> * Only resolve the callback interface method once per iterateFrames call.
> * Only resolve the Method* of the ResolvedJavaMethods to be matched once per iterateFrames call.
> * Only allocate localIsVirtual array if at least one local is virtual (the Java part already expects this).
> * Use matched ResolvedJavaMethod instances instead of going through JVMCIEnv::get_jvmci_method, if possible.

Marked as reviewed by dlong (Reviewer).

I agree, it's confusing that different APIs can't agree on the exact status of compiled native frames.  But as Vladimir pointed out, we support them in vframe::new_vframe, and we also support them in vframeStreamCommon::fill_from_compiled_native_frame(), so it seems OK for asJavaVFrame() to support them as well.

-------------

PR: https://git.openjdk.java.net/jdk/pull/4625


More information about the hotspot-dev mailing list