Review request for 6977034 Thread.getState() very slow
Mandy Chung
mandy.chung at oracle.com
Fri Dec 3 22:52:44 UTC 2010
Fix for 6977034: Thread.getState() very slow
Webrev at:
http://cr.openjdk.java.net/~mchung/6977034/webrev.00/
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/core-libs-dev/attachments/20101203/4155e256/attachment.html>
More information about the core-libs-dev
mailing list