Basics and performance measurements
Performance dimensions
The process of creating efficient software
Factors affecting performance
Micro and Macro-Benchmarking
Profiling
Use of tools: JConsole, Java Visual VM, JMC (Java Mission Control), MAT (memory analysis)
Efficient work on files
IO: streams, buffering, RandomAccessFile
NIO: channels, memory mapped files
NIO.2 (introduction): Path, Files
How to increase serialization performance
Working with collections and arrays
Computational complexity - how to choose algorithms
Recursion, iteration and heuristics
Performance for sets, lists, queues, maps
Views and Collections class
Review of multithreaded collections (java.util.concurrent)
Arrays and collections for simple types
JMH - approved microbenchmak framework for Java
Creating JMH project and benchmarks
Configuration, running, results
Concurrent and parameterizable Benchmarks
Traps and advanced elements
Class loading
Class Class, ClassLoader and class loading process
When to control class loading?
Delaying class loading and reducing the number of classes
Reflection and dynamic proxy
Introduction to modules (Java 9)
Memory management in Java
Garbage Collector and object life cycle
Strong, soft, weak and phantom references
Why memory leak occurs and what to avoid in Java
Generations and memory spaces
Tuning Garbage Collector
Types of Garbage Collector: Serial, Parallel, Concurrent, G1
Changes in Java 8 and Java 9
Java Virtual Machine
Client and server modes
Tuning JVM
Performance changes from version to version
Introduction to optimization for HTTP (OPTIONAL)
Problems with server side optimization
Testing with HTTP: HttpUnit, JWebUnit, Selenium
Performance measurements for HTTP: Grinder, JMeter
Additional information about JMeter
Problems with optimization
Micro-benchmarking problems
Premature optimization
Greed
Other bad practices
|