Incorrect arguments is passed to sun.misc.Perf#createLong

Mandy Chung mandy.chung at oracle.com
Wed Apr 10 14:10:15 PDT 2013


Hi Yasumasa,

I'm adding core-libs and bcc serviceability-dev to move this thread to 
core-libs for sun.misc.PerfCounter discussion.

On 4/9/2013 4:50 AM, Yasu wrote:
> Hi,
>
> I'm trying to create entry from Java program to hsperfdata through 
> sun.misc.PerfCounter .

First of all,  sun.misc.PerfCounter is a private API that is not 
supported and may be changed and removed in any future release. I'm 
curious how you create a counter in hsperfdata through 
sun.misc.PerfCounter.  The constructor is private.

> However, I cannot watch the updated value in my entry through the 
> jstat with interval option.
>
> I guess this cause is that wrong arguments are passed from 
> PerfCounter#<init> to Perf#createLong .
>

Indeed - it's a bug that calls Perf.createLong with the incorrect 
parameters.  I have filed a bug (8011934).

Have you signed the OCA [1]?

Thanks
Mandy
[1] http://openjdk.java.net/contribute/

> sun.misc.PerfCounter:
> ---------
>     private PerfCounter(String name, int type) {
>         this.name = name;
>         ByteBuffer bb = perf.createLong(name, U_None, type, 0L);
>         bb.order(ByteOrder.nativeOrder());
>         this.lb = bb.asLongBuffer();
>     }
> ---------
>
> sun.misc.Perf:
> ---------
>     public native ByteBuffer createLong(String name, int variability,
>                                         int units, long value);
> ---------
>
> "type" in constructor of PerfCounter means "variability".
> So "type" should be set to 2nd argument in perf.createLong()
>
> perf.createLong() should be called as following:
> ---------
>         ByteBuffer bb = perf.createLong(name, type, U_None, 0L);
> ---------
>
>
> I've applied a patch which is attached in this email, it's works fine.
>
>
> Thanks,
>
> Yasumasa



More information about the serviceability-dev mailing list