In some systems, notably the [[Java Virtual Machine]], execution over a range of [[Java bytecode|bytecode instructions]] can be provablyprobably reversed. This allows an adaptive optimizer to make risky assumptions about the code. In the above example, the optimizer may assume all transactions are checks and all account numbers are valid. When these assumptions prove incorrect, the adaptive optimizer can 'unwind' to a valid state and then interpret the byte code instructions correctly.