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

Mandy Chung mandy.chung at oracle.com
Wed Apr 17 21:26:13 UTC 2013


Hi Yasumasa,

Thanks for the patch.  I'm going to sponsor your fix for 8011934 and 
will be pushing it shortly.
http://cr.openjdk.java.net/~mchung/jdk8/webrevs/8011934/webrev.00/

Mandy

On 4/10/2013 6:59 PM, Yasu wrote:
> Hi Mandy,
>
> On 4:59, Mandy Chung wrote:
>> 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.
>
> I've understood that sun.* packages is private API.
> I use PerfCounter with reflection API ( setAccessible(true) )  .
>
>
>>> 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).
>
> Thanks!
>
>
>> Have you signed the OCA [1]?
>
> Yes.
> I already sent OCA with my signature.
>
>
> Thanks,
>
> Yasumasa
>
>> 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 core-libs-dev mailing list