Review request for 6977034 Thread.getState() very slow

Rémi Forax forax at univ-mlv.fr
Sat Dec 4 00:14:12 UTC 2010


On 12/03/2010 11:52 PM, Mandy Chung wrote:
> Fix for 6977034: Thread.getState() very slow
>
> Webrev at:
> http://cr.openjdk.java.net/~mchung/6977034/webrev.00/

Hi Mandy,
you can use Integer.highestOneBit instead of the loop.

Also, setMapElement should be a pure function, i.e without the side 
effect on array.
In that case,

setMapElement(map, JVMTI_THREAD_STATE_TERMINATED,               TERMINATED);

can be transformed to

map[JVMTI_THREAD_STATE_TERMINATED] = highestJVMTIStateBit(TERMINATED);

so the access to the array element is not far from the creation
of the array so the VM can remove array bound checks even if
highestJVMTIStateBit is not inlined.

>
> This is an improvement to map a Thread's threadStatus field to 
> Thread.State.  The VM updates the Thread.threadStatus field directly 
> at state transition with the value as defined in JVM TI [1].  The 
> java.lang.Thread.getState() implementation can directly access the 
> threadStatus value and do a direct lookup from an array of 
> Thread.State.  The threadStatus value is a bit vector and we would 
> have to create an array of a minimum of 1061 (0x425) elements to do 
> direct mapping.   I took the approach to use the first highest order 
> bit set to 1 in the masked threadStatus value as the index to the 
> Thread.State element and only caches 32 elements (could be fewer).  I 
> wrote a micro-benchmark measuring the Thread.getState of a thread in 
> different state that shows 1.7X to 6X speedup (see below).  There is 
> possibly some issue with my micro-benchmark that I didn't observe the 
> 14X speed up as Doug did in his experiment.  However, I'd like to get 
> this reviewed and pushed to the repository so that anyone can do more 
> experiment on the performance measurement.
>
> Thanks
> Mandy
> P.S. The discussion on this thread can be found at [2] [3].
>
> [1] 
> http://download.java.net/jdk7/docs/platform/jvmti/jvmti.html#GetThreadState
> [2] 
> http://mail.openjdk.java.net/pipermail/core-libs-dev/2010-July/004567.html
> [3] 
> http://mail.openjdk.java.net/pipermail/core-libs-dev/2010-August/004721.html
>
>
> 	JDK 7 b120 (in ms)	With fix (in ms)	Speed up
> main		46465	        22772			2.04
> NEW		50676		29921			1.69
> RUNNABLE	42202		14690			2.87
> BLOCKED		72773		12296			5.92
> WAITING		48811		13041			3.74
> TIMED_WAITING	45737		12849			3.56
> TERMINATED	40314		16376			2.46
>

Rémi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/core-libs-dev/attachments/20101204/c9934fc1/attachment.html>


More information about the core-libs-dev mailing list