Performance Checklist

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

  • Test using either the target size for collections or, if this is not definite, various sizes of collections.
  • Test updating collections using the expected order of the data or, if this is not definite, various orders of data, including sorted data.
  • Match the scaling characteristics of the structures against the volumes of data likely to be applied.
  • ArrayList is probably a better default list than LinkedList.
  • Presize collections to their final sizes when possible.
  • Test for the RandomAccess interface where applicable for faster list iteration
  • Consider switching to alternative data structures or algorithms.
    • Use the most appropriate collection class available.
    • Consider using two collections with different performance characteristics to hold the same data.
    • Consider using plain arrays, e.g., int[ ], Object[ ].
    • Consider using hybrid data structures.
    • Use specialized collections that avoid casts or unnecessary method calls.
    • Consider wrapping the elements of the collection in a specialized class that improves access times (e.g., Hashtable key class with faster hashCode( ) and equals( ) methods).
    • Add caching or specialized accessors to collections where some elements are accessed more often than others.
  • Access the underlying collection structure when iterating over the elements of a collection.
    • Copy the elements into an array rather than access many elements one at a time through the collection element accessors.
  • Preallocate memory for element storage rather than allocating at update time.
    • Reuse element-storage objects when they are released.
    • Map elements into one or more arrays of data variables to allocate the whole collection in as few calls as possible.
  • Test if changing a recursive algorithm to an iterative one provides a useful speedup.
  • Make recursive methods tail-recursive.
   
Comments