RFR: 8187221 [Nestmates] Virtual invocation for private interface methods
David Holmes
david.holmes at oracle.com
Tue Sep 5 12:34:46 UTC 2017
webrev: http://cr.openjdk.java.net/~dholmes/8187221/
Following up from JDK-8186763 this issue handles item #2:
2. Use invokeinterface for private interface method invocations, instead
of invokespecial
This involves three basic pieces:
1. javac issues invokeinterface instead of invokespecial
2. Verifier rules requiring invokespecial are relaxed for latest class
file version (exact version TBD based on release timing)
3. Method resolution locates the expected method.
As part of this change I'm also isolating the changes that allowed
invokespecial to be used for nestmate method invocations. In the near
future that code will be removed so that we are near final-form.
Actual file changes are very simple in the end:
src/share/vm/classfile/verifier.cpp
Restore original (pre-nestmate) logic for invokespecial and add in the
nestmate-enabling logic under the UseNewCode guard.
---
src/share/vm/interpreter/linkResolver.cpp
LinkResolver::resolve_interface_method: Only prohibit invokeinterface
for private interface methods if :
InstanceKlass::cast(current_klass)->major_version() <
VIRTUAL_PRIVATE_ACCESS_VERSION
LinkResolver::runtime_resolve_interface_method: Don't resolve in the
receiver class if dealing with a private interface method
---
src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java
Removed the check for interface methods when generating virtual calls.
---
With these changes in place the following test options will test the use
of invokevirtual and invokeinterface for private method invocations:
-javacoption:-XDdisablePrivateAccessors
-javacoption:-XDvirtualizePrivateAccess
If you still want to experiment with the invokespecial changes use:
-javacoption:-XDdisablePrivateAccessors -javaoption:-XX:+UseNewCode
(note the second one is a java option not javac)
Next iteration I plan on removing the invokespecial related changes.
---
Testing so far:
- all runtime jtreg tests
- langtools jtreg tests
Cheers,
David
-----
More information about the valhalla-dev
mailing list