"you cannot possibly know what the biggest bottleneck is beforehand, you can only determine what it is using your various measuring tools, and these tools can mislead you"
"final fields provide for thread-safety for primitives and also object references as long as the object referred to is immutable. If the referred object is mutable, you can still get thread-safe access and update as long as the mutability is handled in a thread-safe way (eg the example StringInterner class can have threads overwrite the internal data structure in a non-deterministic way, but the result of any call will still always produce a coherent object adhering to the class API. Specifically, the 'interned' String could be interned several times as different objects in different threads but this doesn't violate the class API)."