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 |
001 Optimizing JavaTM 002 Issues 003 Global View 004 First Approach 005 First Approach: Pros And Cons 006 Register and Stack Allocation 007 Current Performance 008 Second Approach 009 Interprocedural Analysis 010 Object Inlining 011 Class Duplication 012 Third Approach 013 Global Problem: Exceptions 014 Exceptions: Possible Solutions 015 Impact on HP Java 016 Conclusion