Master the development of efficient and robust Java applications
Programme
Performance
- Definition of performance
- Performance for all
- Elements of performance
- Perceived performance
- Performance at startup
- Impact in layers of an application
- Performance and architecture
- “big O” notation
Optimization process
- Analyze
- Coding
- Measuring to verify
Benchmarking
- Time measurement
- Pitfalls
- Benchmarking
- Microbenchmarks
- JMH
- Recommendations
Tools
- Profiling
- JVisualVM
- Eclipse MAT
- SoapUI
- JMeter
Main performance issues
Effective use of APIs
- API Collections
- wrappers usage
- hashCode() method
Managing inputs and outputs
- Using classes wisely
- Serialization
- Custom serialization
- Network exchanges
Database access
- Excessive number of requests
- Poor persistence configuration
- Large and/or unnecessary data reads
- Connection pool configuration
Memory management
- Memory organization
- Garbage collectors
- Objects life cycle
- Configuring memory and GC
- Memory measurement
- Off Heap
- Memory management and performance
- HotSpot JVM options for monitoring GC activity
- Memory leaks
- Resource leaks
Optimizing memory usage
- Optimize memory occupancy
- Optimize instantiations
Multi-tasking
- Benefits of multi-tasking
- Using multi-tasking
- APIs
- Fork/Join framework
- Race condition and contention
- Deadlocks
- Getting and using a threaddump
- Parallel streams
Urban legends
- Java is slow
- Strings concatenation
- Increasing the heap size
- Caching as THE solution
- 64 bits vs 32 bits
Importance of JVM and Java version
- Choosing the JVM
- Configuring the JVM
- Version of Java used
Performance is not only technical
- Non-technical reasons for poor performance
- Taking into account in SDLC (Software Development Live cycle)
- Measuring performance continuously
- Monitoring