Source: http://www.filpizlo.com/papers/pizlo-eurosys2010-fijivm.pdf