<AWT Dev> Historical use of Thread.sleep(0) in the GUI?
David Holmes
david.holmes at oracle.com
Wed Jan 20 07:45:42 UTC 2016
Hi Folks,
I'm currently looking at some hotspot cleanup surrounding the
ConvertSleepToYield VM flag. When this flag is true it replaces a call
to Thread.sleep(0) with a platform yield call; otherwise the platform
"sleep" function is called with sleep time of 1ms. (Note: no reasonable
Java code should ever use Thread.sleep(0) :) )
This flag stems back to "pre-historic" days when hotspot was replacing
the classic VM on Windows, and IIUC only a Solaris sparc implementation
existed. The default for Windows (and all platforms subsequently ported
to - including Solaris x86!) was to set the flag true; while for Solaris
sparc it was set to false. The comment in the code is:
// When ConvertSleepToYield is on, this matches the classic VM
implementation of
// JVM_Sleep. Critical for similar threading behaviour (Win32)
// It appears that in certain GUI contexts, it may be beneficial to do a
short sleep
// for SOLARIS
Does anyone have any knowledge of what those GUI contexts may have been?
(I suspect some old motif based environment.)
As I said, for Solaris x86 the flag value differs from sparc (presumably
an oversight) for what should be an OS issue I would think. Can anyone
think of a reason why the GUI on sparc may respond differently to x86 in
the context of using a sleep(0)?
Finally, as I want to get rid of the flags altogether I first need to
change the setting on sparc. Are there any specific GUI responsiveness
tests that I might run to ensure this change has no averse impact?
Thanks,
David
More information about the awt-dev
mailing list