Cod: JVA-076
Durata: 40 ore
Durata: 40 ore
Descriere
In cadrul acestui training vom discuta despre diferite abordari legate de profiling, identificarea bottlenecks, tuning al unei virtual machine, setarea JVM flags, serialization si caching libraries. Ne vom uita si la off-heap data storage, benchmarking, memory monitoring si tunare precum si o multitudine de alte subiecte.Subiecte curs
Prezentare performance tuning- Practici comune
- Strategii de tuning
- Metrici legate de performanta (latency, throughput, bandwidth)
- Cum sa imbunatatim performanta
- Instrumente de masurare a performantei
- JMeter
- Scrierea de load tests cu JMeter
- Cum sa imbunatatim performanta prin arhitectura software
- Bune practici pentru imbunatatirea performantei codului
Algoritmi GC
- Utilizarea memoriei de catre obiectele Java
- Abordari comune si algoritmi ale garbage collectors
- Serial GC garbage collector
- Parallel GC garbage collector
- CMS garbage collector
- G1 garbage collector
- Shenandoah garbage collector
- Garbage collectors tuning
- Instrumente pentru a colecta metrici legate garbage collection
- Cum sa selectam garbage collector potrivit
HotSpot JIT compiler
- IT compilation
- Java byte code
- Tiered compilation
- Code cache &tuning
- Optimizari de cod
- Code deoptimization (si cand se intampla)
- JITWatch instrument pentru a analiza compilarea rezultatelor
- Tipuri de optimizari
- Optimizari speculative
- Compiler tuning
- Compilarea AOT
JVM flags
- Scopul si categoriile JVM flags
- Common flags
- String-related flags
- Memory management flags
- Safepoints and related flags
- TLABs and related flags
- JVM tuning plan
Java benchmarking cu JMH
- Ce este benchmarking?
- Introducere in JMH
- API al JMH
- Exemple
- Practica JMH
Folosirea off-heap memory
- Ce este sun.misc.Unsafe?
- Metode nesigure
- Performanta memoriei native
- Crearea de structuri de date in memoria nativa
- Masuratori ale performantei memoriei native (si paralela cu memory on heap)
- Foreign Memory Access API
Serialization
- JSON serializers (GSON, Jackson)
- Binary serializers (Protobuf, Jackson Smile, Kryo, FST, One NIO)
- Comparatia performantei pentru serializators diferiti
Java profiling
- Cand si cum sa facem profiling
- Sampling & instrumenting profilers
- Folosirea Java VisualVM pentru profiling
- Profiling cu Spring AOP
- Profiling cu IDEA si async profiler
- Java Flight Recorder
- Analiza Java Flight Recorder logs folosind Mission Control
- Crearea si inregistrarea JFR events
- Folosirea Java agents in cod (pentru a inregistra evenimente in Java Flight Recorder)
- Scrierea de programe pentru analiza automata a log-urilor JFR
- Colectarea si analiza interogarilor SQL folosind JFR
- Colectarea si analiza cerintelor REST folosind JFR
Monitorizarea si analiza heap data / Memory leaks
- Instrumente de analiza a datelor in heap memory
- Semne de memory leaks
- Principalele cauze memory leaks
- Cautarea si detectarea memory leaks
GraalVM
- Ecosistemul GraalVM
- GraalVM runtimes
- Polyglot API
- Compilation & Native image
- Benchmarks
Java caching
- Caching patterns
- Comparison of caching API
- Caching of database queries
- HTTP caching
- Metrici de baza si setari pentru caching libraries
- Comparatii intre caching libraries populare
- Service level caching
- Caching Spring Services
- Applicatii folosind caches pe layere diferite
Prezentarea altor abordari de a imbunatatii performanta
- Parallel programming (thread pools, parallel streams, fork-join framework)
- Asynchronous programming
- Reactive programming (Reactor, VertX)
- Optimizarea accesului la baza de date
- Cloud computing (microservices, Spring Cloud)
- Benchmarks si concluzii
Obiective
- O introducere in abordarile pe care le poti avea pentru a imbunatatii performanta unei aplicatii Java
Public tinta
- Programatori Java
- Arhitecti software in Java