Based on Summer work by Zoran Budimlic at JavaSoft and Collaboration with Ken Kennedy |
Java bytecodes are at a higher level than ordinary assembly code |
Exceptions greatly reduce code movement opportunities |
OOP style (lots of method calls) reduces the data flow information available |
No knowledge about the whole program at compile time |
Standard trilema: functionality vs. portability vs. performance |
Adopt the current javac strategy: one class at a time, no changes to VM, lowest performance |
Or sacrifice some portability and functionality for better optimization |
Or sacrifice a lot of portability and functionality for best performance |