Performance Checklist

Most of these suggestions apply only after a bottleneck has been identified:

  • Make the loop do as little as possible.
    • Remove from the loop any execution code that does not need to be executed on each pass.
    • Move any code that is repeatedly executed with the same result, and assign that code to a temporary variable before the loop ("code motion").
    • Avoid method calls in loops when possible, even if this requires rewriting or inlining.
    • Multiple access or update to the same array element should be done on a temporary variable and assigned back to the array element when the loop is finished.
    • Avoid using a method call in the loop termination test.
    • Use int data types preferentially, especially for the loop variable.
    • Use System.arraycopy( ) for copying arrays.
    • Try to use the fastest tests in loops.
    • Convert equality comparisons to identity comparisons when possible.
    • Phrase multiple boolean tests in one expression so that they "short circuit" as soon as possible.
    • Eliminate unneeded temporary variables from loops.
    • Try unrolling the loop to various degrees to see if this improves speed.
  • Rewrite any switch statements to use a contiguous range of case values.
  • Identify whether a recursive method can be made faster.
    • Convert recursive methods to use iteration instead.
    • Convert recursive methods to use tail recursion.
    • Try caching recursively calculated values to reduce the depth of recursion.
    • Use temporary variables in place of passed parameters to convert a recursive method using a single search path into an iterative method.
    • Use temporary stacks in place of passed parameters to convert a recursive method using multiple search paths into an iterative method.
   
Comments