On 9/24/19 8:45 AM, Hohensee, Paul wrote:
Good idea. The current definition is
enum {
JMM_VERSION_1 = 0x20010000,
JMM_VERSION_1_0 = 0x20010000,
JMM_VERSION_1_1 = 0x20010100, // JDK 6
JMM_VERSION_1_2 = 0x20010200, // JDK 7
JMM_VERSION_1_2_1 = 0x20010201, // JDK 7 GA
JMM_VERSION_1_2_2 = 0x20010202,
JMM_VERSION_2 = 0x20020000, // JDK 10
JMM_VERSION = 0x20020000
};
Were there changes in 11, 12, and 13 to justify adding major/minor versions for
any of them? What was changed in 10 to justify a new major version?
A new API ThreadMXBean.dumpAllThreads taking a maxDepth argument [1] was
added in 10. It changed an existing function signature. I don't think
any change was made to jmm.h since 10.
The JMM version was originally designed to follow the same convention as
the old JDK versioning where major version revision indicates a major
release with potential incompatible change whereas minor version
revision indicates that no incompatible change to existing APIs. This
explains why major version was bumped in 10.
Absent any other additions, would this work? It creates a minor version for 14.
JMM_VERSION_2_1 = 0x20020100, // JDK 14
JMM_VERSION = JMM_VERSION_2_1
Perhaps it's time to simplify the scheme to bump the major number when
there is change in a JDK release.
JMM_VERSION_14 = 0x20040000,
Mandy
Thanks,
Paul
On 9/23/19, 8:42 PM, "Mandy Chung" <mandy.ch...@oracle.com> wrote:
Good question.
When HS express (mix-n-matched JDK and HS version) was supported, the
JMM_VERSION was rev'ed to enable the version checking. HS express is no
longer supported. JDK is supported to run with this version of HotSpot
VM. OTOH, this adds a new function in the middle of the function
table. I think it's a good convention to follow and bump the version
number.
Mandy
On 9/23/19 7:54 PM, Daniil Titov wrote:
> Hi Paul,
>
> I have a question about JMM_VERSION. Since the changeset introduces a
new method in the interface
> should not JMM_VERSION declared in src/hotspot/share/include/jmm.h be
bumped?
>
> Thank you,
> --Daniil
>
> On 9/23/19, 5:43 PM, "serviceability-dev on behalf of Hohensee, Paul"
<serviceability-dev-boun...@openjdk.java.net on behalf of hohen...@amazon.com> wrote:
>
> Update:
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8231209
> CSR: https://bugs.openjdk.java.net/browse/JDK-8231374
> Webrev: http://cr.openjdk.java.net/~phh/8231209/webrev.01/
>
> All test suites that reference getThreadAllocatedBytes pass. These
are
>
> hotspot/jtreg/vmTestbase/nsk/monitoring (contained the failing test)
> jdk/com/sun/management
> jdk/jdk/jfr/event/runtime
>
> Per Mandy, the default getCurrentThreadAllocatedBytes
implementation throws a UOE.
>
> The CSR is a copy of the original, and in addition points out that
ThreadMXBean is a PlatformManagedObject, why that's important, and why a default
getCurrentThreadAllocatedBytes implementation is necessary.
>
> I changed the nsk test to make sure that the approach it uses will
work with getCurrentThreadAllocatedBytes, which per Mandy is defined as a
property. Though I'm happy to remove it if there's a consensus it isn't needed.
>
> Thanks,
>
> Paul
>
> On 9/19/19, 11:03 PM, "serguei.spit...@oracle.com"
<serguei.spit...@oracle.com> wrote:
>
> Hi Paul,
>
> I have almost the same comments as David:
> - the same two spots of changes identified
> - the addition of the default method was expected
> - the change in test is a surprise (I also doubt, it is
really needed)
> - new CSR is needed
>
>
> Sorry, I forgot to remind about running the vmTestbase
monitoring tests. :(
>
> Thanks,
> Serguei
>
>
> On 9/19/19 16:06, David Holmes wrote:
> > Hi Paul,
> >
> > On 20/09/2019 2:52 am, Hohensee, Paul wrote:
> >> More formally,
> >>
> >> Bug: https://bugs.openjdk.java.net/browse/JDK-8231209
> >> Webrev: http://cr.openjdk.java.net/~phh/8231209/webrev.00/
> >
> > I'm assuming there are only two changes here:
> >
> > 1. The new method is now a default method that throws UOE.
> >
> > That seems fine.
> >
> > 2. You implemented the new method in the test class.
> >
> > I don't understand why you did that. The test can't be
calling the new
> > method. Now that it is a default method we will get past the
> > compilation failure that caused the problem. So no change to
the test
> > should be needed AFAICS.
> >
> > A new CSR request is needed. Just copy everything across from
the old,
> > with the updated spec. But please also mention this is a
> > PlatformManagedObject in the compatibility discussion.
> >
> > Thanks,
> > David
> >
> >> Thanks,
> >>
> >> On 9/19/19, 9:44 AM, "serviceability-dev on behalf of
Hohensee,
> >> Paul" <serviceability-dev-boun...@openjdk.java.net on behalf
of
> >> hohen...@amazon.com> wrote:
> >>
> >> Off by 2 error. Changed the subject to reflect 8231209.
> >> http://cr.openjdk.java.net/~phh/8231209/webrev.00/
> >> Paul
> >> On 9/19/19, 6:31 AM, "Daniel D. Daugherty"
> >> <daniel.daughe...@oracle.com> wrote:
> >> >
http://cr.openjdk.java.net/~phh/8231211/webrev.00/
> >> The redo bug is 8231209. 8231211 is closed
as a dup
> >> of 8231210.
> >> Dan
> >> On 9/19/19 9:17 AM, Hohensee,
Paul wrote:
> >> > I'll have the default method throw UOE. That's
the same as
> >> the other default methods do.
> >> >
> >> > The necessary test fix is in
> >>
test/hotspot/jtreg/vmTestbase/nsk/monitoring/share/server/ServerThreadMXBeanNew.java,
> >> which needs a new getCurrentThreadAllocatedBytes method,
defined as
> >> >
> >> > public long getCurrentThreadAllocatedBytes()
{
> >> > return (Long)
> >> invokeMethod("getCurrentThreadAllocatedBytes",
> >> > new Object[] { },
> >> > new String[] { });
> >> > }
> >> >
> >> > With this fix, the 134 tests in
> >> test/hotspot/jtreg/vmTestbase/nsk/monitoring/ThreadMXBean
pass.
> >> Preliminary webrev at
> >> >
> >> > http://cr.openjdk.java.net/~phh/8231211/webrev.00/
> >> >
> >> > Is it worth adding getCurrentThreadAllocatedBytes
tests to
> >> the
> >>
test/hotspot/jtreg/vmTestbase/nsk/monitoring/ThreadMXBean/GetThreadAllocatedBytes
> >> set?
> >> >
> >> > Paul
> >> >
> >> > On 9/18/19, 8:16 PM, "David Holmes"
> >> <david.hol...@oracle.com> wrote:
> >> >
> >> > On 19/09/2019 12:57 pm, Mandy Chung wrote:
> >> > > On 9/18/19 5:00 PM, Hohensee, Paul wrote:
> >> > >> They all implement
> >> com.sun.management.ThreadMXBean, so adding a
> >> > >> getCurrentThreadAllocatedBytes broke them.
> >> Potential fix is to give it
> >> > >> a default implementation, vis
> >> > >>
> >> > >> public default long
> >> getCurrentThreadAllocatedBytes() {
> >> > >> return -1;
> >> > >> }
> >> > >>
> >> > >
> >> > > com.sun.management.ThreadMXBean (and other
platform
> >> MXBeans) is a
> >> > > "sealed" interface which should only be
implemented
> >> by JDK.
> >> >
> >> > Didn't realize that. I don't recall knowing
about
> >> PlatformManagedObject.
> >> > Sealed types will at least allow this to be
enforced,
> >> though I have to
> >> > wonder what the tests are doing here.
> >> >
> >> > > Unfortunately we don't have the sealed
type feature
> >> yet. Yes it needs
> >> > > to be a default method. I think it should
throw UOE.
> >> > >
> >> > > * @implSpec
> >> > > * The default implementation throws
{@code
> >> > > UnsupportedOperationException}.
> >> > >
> >> > > The @throw UOE can make it clear that it
does not
> >> support current thread
> >> > > memory allocation measurement.
> >> >
> >> > Yes that seems a reasonable default if we
don't want
> >> this to be
> >> > implemented outside the platform.
> >> >
> >> > Thanks,
> >> > David
> >> >
> >> > > Mandy
> >> >
> >> >
> >>
>
>
>
>
>
>
>