Java's design goals of portability, safety, and ubiquity make it a potentially ideal language for large-scale heterogeneous computing. One of the remaining challenges is to create performance models and associated speci cations and programming constructs that can be used to reason about performance properties of systems implemented in Java.