Java Under the Hood — Part 1: Java Virtual Machine