Yes, just as you say: the stupid range check is there even though it can never possibly be required. In the byte-code interpreter case it turns out that just that extra overhead is noticeble, especially if your byte-code instructions are very light-weight (think stack machine for example). This despite the fact that the branch prediction is going to be perfect.