Table of Contents
Cover
Table of Contents
Preface
Who Should (and Shouldn’t) Read This Book
Conventions Used in This Book
Using Code Examples
Safari® Books Online
How to Contact Us
Acknowledgments
Chapter 1. Introduction
A Brief Outline
Platforms and Conventions
JVM Tuning Flags
The Complete Performance Story
Write Better Algorithms
Write Less Code
Oh Go Ahead, Prematurely Optimize
Look Elsewhere: The Database Is Always the Bottleneck
Optimize for the Common Case
Summary
Chapter 2. An Approach to Performance Testing
Test a Real Application
Microbenchmarks
Macrobenchmarks
Mesobenchmarks
Common Code Examples
Understand Throughput, Batching, and Response Time
Elapsed Time (Batch) Measurements
Throughput Measurements
Response Time Tests
Understand Variability
Test Early, Test Often
Summary
Chapter 3. A Java Performance Toolbox
Operating System Tools and Analysis
CPU Usage
The CPU Run Queue
Disk Usage
Network Usage
Java Monitoring Tools
Basic VM Information
Thread Information
Class Information
Live GC Analysis
Heap Dump Postprocessing
Profiling Tools
Sampling Profilers
Instrumented Profilers
Blocking Methods and Thread Timelines
Native Profilers
Java Mission Control
Java Flight Recorder
Enabling JFR
Selecting JFR Events
Summary
Chapter 4. Working with the JIT Compiler
Just-in-Time Compilers: An Overview
Hot Spot Compilation
Basic Tunings: Client or Server (or Both)
Optimizing Startup
Optimizing Batch Operations
Optimizing Long-Running Applications
Java and JIT Compiler Versions
Intermediate Tunings for the Compiler
Tuning the Code Cache
Compilation Thresholds
Inspecting the Compilation Process
Advanced Compiler Tunings
Compilation Threads
Inlining
Escape Analysis
Deoptimization
Not Entrant Code
Deoptimizing Zombie Code
Tiered Compilation Levels
Summary
Chapter 5. An Introduction to Garbage Collection
Garbage Collection Overview
Generational Garbage Collectors
GC Algorithms
Choosing a GC Algorithm
Basic GC Tuning
Sizing the Heap
Sizing the Generations
Sizing Permgen and Metaspace
Controlling Parallelism
Adaptive Sizing
GC Tools
Summary
Chapter 6. Garbage Collection Algorithms
Understanding the Throughput Collector
Adaptive and Static Heap Size Tuning
Understanding the CMS Collector
Tuning to Solve Concurrent Mode Failures
Tuning CMS for Permgen
Incremental CMS
Understanding the G1 Collector
Tuning G1
Advanced Tunings
Tenuring and Survivor Spaces
Allocating Large Objects
AggressiveHeap
Full Control Over Heap Size
Summary
Chapter 7. Heap Memory Best Practices
Heap Analysis
Heap Histograms
Heap Dumps
Out of Memory Errors
Using Less Memory
Reducing Object Size
Lazy Initialization
Immutable and Canonical Objects
String Interning
Object Lifecycle Management
Object Reuse
Weak, Soft, and Other References
Summary
Chapter 8. Native Memory Best Practices
Footprint
Measuring Footprint
Minimizing Footprint
Native NIO Buffers
Native Memory Tracking
JVM Tunings for the Operating System
Large Pages
Compressed oops
Summary
Chapter 9. Threading and Synchronization Performance
Thread Pools and ThreadPoolExecutors
Setting the Maximum Number of Threads
Setting the Minimum Number of Threads
Thread Pool Task Sizes
Sizing a ThreadPoolExecutor
The ForkJoinPool
Automatic Parallelization
Thread Synchronization
Costs of Synchronization
Avoiding Synchronization
False Sharing
JVM Thread Tunings
Tuning Thread Stack Sizes
Biased Locking
Lock Spinning
Thread Priorities
Monitoring Threads and Locks
Thread Visibility
Blocked Thread Visibility
Summary
Chapter 10. Java Enterprise Edition Performance
Basic Web Container Performance
HTTP Session State
Thread Pools
Enterprise Java Session Beans
Tuning EJB Pools
Tuning EJB Caches
Local and Remote Instances
XML and JSON Processing
Data Size
An Overview of Parsing and Marshalling
Choosing a Parser
XML Validation
Document Models
Java Object Models
Object Serialization
Transient Fields
Overriding Default Serialization
Compressing Serialized Data
Keeping Track of Duplicate Objects
Java EE Networking APIs
Sizing Data Transfers
Summary
Chapter 11. Database Performance Best Practices
JDBC
JDBC Drivers
Prepared Statements and Statement Pooling
JDBC Connection Pools
Transactions
Result Set Processing
JPA
Transaction Handling
Optimizing JPA Writes
Optimizing JPA Reads
JPA Caching
JPA Read-Only Entities
Summary
Chapter 12. Java SE API Tips
Buffered I/O
Classloading
Random Numbers
Java Native Interface
Exceptions
String Performance
Logging
Java Collections API
Synchronized Versus Unsynchronized
Collection Sizing
Collections and Memory Efficiency
AggressiveOpts
Alternate Implementations
Miscellaneous Flags
Lambdas and Anonymous Classes
Lambda and Anonymous Classloading
Stream and Filter Performance
Lazy Traversal
Summary
Appendix A. Summary of Tuning Flags
Index
About the Author