Measuring and improving performance
- Assessing response time
- Conducting load and stress tests
- Specifying strategies for improving performance
Exploiting garbage collectors
- Exploring garbage collection metrics
- Choosing appropriate algorithms for garbage collection
- Avoiding the hazards of finalizers
- Preventing memory leaks with reference types
Taking full advantage of threads
- Writing reliable thread-safe code
- Avoiding race hazards and deadlocks
- Employing the Executors framework
Bulletproofing a threaded application
- Synchronizing and sharing data between threads
- Managing the performance implications of synchronization
Exploring alternatives to synchronization
- Taking advantage of the volatile modifier
- Eliminating data sharing with ThreadLocal variables