What are the Semantics of Uninterruptible Code?
Declaring a method uninterruptible enables a Jikes RVM developer to prevent the Jikes RVM compilers from inserting “hidden” thread switch points in the compiled code for the method. As a result, the code can be written assuming that it cannot involuntarily “lose control” while executing due to a timer-driven thread switch. In particular, neither yield points nor stack overflow checks will be generated for uninterruptible methods. When writing uninterruptible code, the programmer is restricted to a subset of the Java language. The following are the restrictions on uninterruptible code. • Because a stack overflow check represents a potential yield point (if GC is triggered when the stack is grown), stack overflow checks are omitted from the prologues of uninterruptible code. As a result, all uninterruptible code must be able to execute in the stack space available to them when the first uninterruptible method on the call stack is invoked. This is typically about 8K for uninterruptible re