RFR(S): 8024368: private methods are allocated vtable slots
Karen Kinnear
karen.kinnear at oracle.com
Wed Oct 24 16:36:32 UTC 2018
Serguei,
Fix looks good. Officially reviewed.
Many thanks for the tests and the -Xlog output. Many thanks for fixing this.
thanks,
Karen
> On Oct 16, 2018, at 1:03 AM, serguei.spitsyn at oracle.com wrote:
>
> Please, review a fix for:
> https://bugs.openjdk.java.net/browse/JDK-8024368 <https://bugs.openjdk.java.net/browse/JDK-8024368>
>
> Webrev:
> http://cr.openjdk.java.net/~sspitsyn/webrevs/2018/8024368-priv-vtable.2/ <http://cr.openjdk.java.net/%7Esspitsyn/webrevs/2018/8024368-priv-vtable.2/>
>
>
> Summary:
>
> Private method should not allocate vtable indeces.
> The fix tweaks several conditions in the functions:
> klassVtable::update_inherited_vtable() and klassVtable::needs_new_vtable_entry(),
> adds a couple of asserts and makes several comments up-to-date.
>
> The fix was preliminary reviewed by Karen, David H. and Lois.
>
> Testing:
>
> The fix was verified with runtime/{appcds+Nestmates+RedefineTests+SelectionResolution}
> and vmTestbase/vm/runtime/defmeth tests.
> Also, I ran a mach5 job with the flags: tier1,tier2,hs-tier3,hs-tier4,hs-tier5.
>
> By suggestion from David, it was also tested with the -Xlog output for vtables before and after the fix.
> I've done this comparison (awk was used to get rid of the first column with the time stamps).
> It shows that private methods were included into vtable before the fix but not included after.
> Please, see one fragment as an example:
>
> 166c166
> < copy vtable from java.lang.Object to java.lang.StackFrameInfo size 17
> ---
> > copy vtable from java.lang.Object to java.lang.StackFrameInfo size 16
> 180d179
> < adding java.lang.StackFrameInfo.ensureRetainClassRefEnabled()V at index 16, flags: private
> 182c181
> < copy vtable from java.lang.StackFrameInfo to java.lang.LiveStackFrameInfo size 17
> ---
> > copy vtable from java.lang.StackFrameInfo to java.lang.LiveStackFrameInfo size 16
> 188,201c187,191
> < copy vtable from java.lang.Object to java.lang.StackStreamFactory$AbstractStackWalker size 18
> < adding java.lang.StackStreamFactory$AbstractStackWalker.close()V at index 5, flags: private
> < adding java.lang.StackStreamFactory$AbstractStackWalker.toStackWalkMode(Ljava/lang/StackWalker;I)I at index 6, flags: private
> < adding java.lang.StackStreamFactory$AbstractStackWalker.consumeFrames()Ljava/lang/Object; at index 7, flags: protected abstract
> < adding java.lang.StackStreamFactory$AbstractStackWalker.initFrameBuffer()V at index 8, flags: protected abstract
> < adding java.lang.StackStreamFactory$AbstractStackWalker.batchSize(I)I at index 9, flags: protected abstract
> < adding java.lang.StackStreamFactory$AbstractStackWalker.getNextBatchSize()I at index 10, flags: protected
> < adding java.lang.StackStreamFactory$AbstractStackWalker.skipReflectionFrames()Z at index 11, flags: private
> < adding java.lang.StackStreamFactory$AbstractStackWalker.doStackWalk(JIIII)Ljava/lang/Object; at index 12, flags: private
> < adding java.lang.StackStreamFactory$AbstractStackWalker.getNextBatch()I at index 13, flags: private
> < adding java.lang.StackStreamFactory$AbstractStackWalker.beginStackWalk()Ljava/lang/Object; at index 14, flags: private
> < adding java.lang.StackStreamFactory$AbstractStackWalker.fetchStackFrames(I)I at index 15, flags: private
> < adding java.lang.StackStreamFactory$AbstractStackWalker.fetchStackFrames(JJII[Ljava/lang/Object;)I at index 16, flags: private native
> < adding java.lang.StackStreamFactory$AbstractStackWalker.callStackWalk(JIII[Ljava/lang/Object;)Ljava/lang/Object; at index 17, flags: private native
> ---
> > copy vtable from java.lang.Object to java.lang.StackStreamFactory$AbstractStackWalker size 9
> > adding java.lang.StackStreamFactory$AbstractStackWalker.consumeFrames()Ljava/lang/Object; at index 5, flags: protected abstract
> > adding java.lang.StackStreamFactory$AbstractStackWalker.initFrameBuffer()V at index 6, flags: protected abstract
> > adding java.lang.StackStreamFactory$AbstractStackWalker.batchSize(I)I at index 7, flags: protected abstract
> > adding java.lang.StackStreamFactory$AbstractStackWalker.getNextBatchSize()I at index 8, flags: protected
>
>
> Thanks,
> Serguei
>
More information about the hotspot-runtime-dev
mailing list