Sources of Java Performance Problems
Lack of compiler optimizations
Lack of object code optimizations in JIT
Runtime checks such as bytecode verification and array range checking
Interpretation of bytecode at runtime, even with JIT
Automatic garbage collection
Heap allocation of all objects
Initialization of arrays and arrays are objects
Call-by-reference simulated with objects