Synopses & Reviews
“The definitive master class in performance tuning Java applications…if you love all the gory details, this is the book for you.” –James Gosling, creator of the Java Programming Language
Improvements in the Java platform and new multicore/multiprocessor hardware have made it possible to dramatically improve the performance and scalability of Java software.
Java™ Performance covers the latest Oracle and third-party tools for monitoring and measuring performance on a wide variety of hardware architectures and operating systems. The authors present dozens of tips and tricks you’ll find nowhere else.
You’ll learn how to construct experiments that identify opportunities for optimization, interpret the results, and take effective action. You’ll also find powerful insights into microbenchmarking–including how to avoid common mistakes that can mislead you into writing poorly performing software. Then, building on this foundation, you’ll walk through optimizing the Java HotSpot VM, standard and multitiered applications; Web applications, and more. Coverage includes
- Taking a proactive approach to meeting application performance and scalability goals
- Monitoring Java performance at the OS level in Windows, Linux, and Oracle Solaris environments
- Using modern Java Virtual Machine (JVM) and OS observability tools to profile running systems, with almost no performance penalty
- Gaining “under the hood” knowledge of the Java HotSpot VM that can help you address most Java performance issues
- Integrating JVM-level and application monitoring
- Mastering Java method and heap (memory) profiling
- Tuning the Java HotSpot VM for startup, memory footprint, response time, and latency
- Determining when Java applications require rework to meet performance goals
- Systematically profiling and tuning performance in both Java SE and Java EE applications
- Optimizing the performance of the Java HotSpot VM
Using this book, you can squeeze maximum performance and value from all your Java applications–no matter how complex they are, what platforms they’re running on, or how long you’ve been running them.
Synopsis
"The definitive master class in performance tuning Java applications...if you love all the gory details, this is the book for you." -James Gosling, creator of the Java Programming Language
Improvements in the Java platform and new multicore/multiprocessor hardware have made it possible to dramatically improve the performance and scalability of Java software.
Java(TM) Performance covers the latest Oracle and third-party tools for monitoring and measuring performance on a wide variety of hardware architectures and operating systems. The authors present dozens of tips and tricks you'll find nowhere else.
You'll learn how to construct experiments that identify opportunities for optimization, interpret the results, and take effective action. You'll also find powerful insights into microbenchmarking-including how to avoid common mistakes that can mislead you into writing poorly performing software. Then, building on this foundation, you'll walk through optimizing the Java HotSpot VM, standard and multitiered applications; Web applications, and more. Coverage includes
- Taking a proactive approach to meeting application performance and scalability goals
- Monitoring Java performance at the OS level in Windows, Linux, and Oracle Solaris environments
- Using modern Java Virtual Machine (JVM) and OS observability tools to profile running systems, with almost no performance penalty
- Gaining "under the hood" knowledge of the Java HotSpot VM that can help you address most Java performance issues
- Integrating JVM-level and application monitoring
- Mastering Java method and heap (memory) profiling
- Tuning the Java HotSpot VM for startup, memory footprint, response time, and latency
- Determining when Java applications require rework to meet performance goals
- Systematically profiling and tuning performance in both Java SE and Java EE applications
- Optimizing the performance of the Java HotSpot VM
Using this book, you can squeeze maximum performance and value from all your Java applications-no matter how complex they are, what platforms they're running on, or how long you've been running them.
About the Author
Charlie Hunt is a Java Performance Engineer at Oracle. He is responsible for improving the performance of the HotSpot JVM and Java SE class libraries. He has also been involved in improving the performance of the GlassFish Application Server. He is a regular speaker at the JavaOne Conference on the subject of Java performance. He also actively participates in several popular open source communities including; Project Grizzly as a co-project owner and contributor, and NetBeans, where he is an evangelist for NetBeans technology and a co-author of the widely selling NetBeans IDE Field Guide. He wrote his first Java
program in 1999 and has been improving the performance of Java and Java applications ever since. He holds a Master of Science degree in Computer Science from the Illinois Institute of Technology and a Bachelor of Science in Computer Science from Iowa State University. In his spare time, he works on improving the performance of high horsepower racing engines.
Binu John is a Senior Performance Engineer at Ning, Inc, the leading social network platform for people's interests and passions. In his current role, he is focused on improving the performance and scalability of the Ning platform to support millions of page views per month. Before joining Ning, Binu spent more than an decade working on Java related performance work at Sun Microsystems. As a member of Sun's Enterprise Java Performance team, he worked on several open source projects including the GlassFish application server, the Open Source Enterprise Service Bus (Open ESB), and Open MQ JMS product. He has been an active contributor in the development of the various industry standard benchmarks such as SPECjms2007 and SPECJAppServer2008, has published several performance whitepapers and has previously contributed to the XMLTest and WSTest benchmark projects at java.net. Binu holds master of science degrees in Biomedical Engineering and Computer Science from The University of Iowa. In his spare time, Binu enjoys reading, hiking and playing hockey.
Table of Contents
Foreword by James Gosling xi Foreword by Steve Wilson xiii
Preface xv
Acknowledgments xix
About the Authors xxi
Chapter 1: Strategies, Approaches, and Methodologies 1
Forces at Play 2
Two Approaches, Top Down and Bottom Up 5
Choosing the Right Platform and Evaluating a System 8
Bibliography 11
Chapter 2: Operating System Performance Monitoring 13
Definitions 14
CPU Utilization 14
CPU Scheduler Run Queue 28
Memory Utilization 32
Network I/O Utilization 41
Disk I/O Utilization 46
Additional Command Line Tools 49
Monitoring CPU Utilization on SPARC T-Series Systems 50
Bibliography 53
Chapter 3: JVM Overview 55
HotSpot VM High Level Architecture 56
HotSpot VM Runtime 58
HotSpot VM Garbage Collectors 80
HotSpot VM JIT Compilers 92
HotSpot VM Adaptive Tuning 100
References 106
Chapter 4: JVM Performance Monitoring 107
Definitions 108
Garbage Collection 108
JIT Compiler 146
Class Loading 147
Java Application Monitoring 150
Bibliography 153
Chapter 5: Java Application Profiling 155
Terminology 157
Oracle Solaris Studio Performance Analyzer 159
NetBeans Profiler 189
References 209
Chapter 6: Java Application Profiling Tips and Tricks 211
Performance Opportunities 211
System or Kernel CPU Usage 212
Lock Contention 222
Volatile Usage 234
Data Structure Resizing 235
Increasing Parallelism 243
High CPU Utilization 246
Other Useful Analyzer Tips 247
Bibliography 249
Chapter 7: Tuning the JVM, Step by Step 251
Methodology 252
Application Systemic Requirements 255
Rank Systemic Requirements 257
Choose JVM Deployment Model 58
Choose JVM Runtime 259
GC Tuning Fundamentals 262
Determine Memory Footprint 268
Tune Latency/Responsiveness 278
Tune Application Throughput 307
Edge Cases 316
Additional Performance Command Line Options 316
Bibliography 321
Chapter 8: Benchmarking Java Applications 323
Challenges with Benchmarks 324
Design of Experiments 347
Use of Statistical Methods 348
Reference 355
Bibliography 355
Chapter 9: Benchmarking Multitiered Applications 357
Benchmarking Challenges 357
Enterprise Benchmark Considerations 360
Application Server Monitoring 382
Profiling Enterprise Applications 399
Bibliography 401
Chapter 10: Web Application Performance 403
Benchmarking Web Applications 404
Web Container Components 405
Web Container Monitoring and Performance Tunings 408
Best Practices 427
Bibliography 450
Chapter 11: Web Services Performance 453
XML Performance 454
Validation 460
Resolving External Entities 462
Partial Processing of XML Documents 465
Selecting the Right API 468
JAX-WS Reference Implementation Stack 471
Web Services Benchmarking 473
Factors That Affect Web Service Performance 477
Performance Best Practices 486
Bibliography 503
Chapter 12: Java Persistence and Enterprise Java Beans Performance 505
EJB Programming Model 506
The Java Persistence API and Its Reference Implementation 507
Monitoring and Tuning the EJB Container 511
Transaction Isolation Level 521
Best Practices in Enterprise Java Beans 522
Best Practices in Java Persistence 540
Bibliography 551
Appendix A: HotSpot VM Command Line Options of Interest 553
Appendix B: Profiling Tips and Tricks Example Source Code 573
Lock Contention First Implementation 573
Lock Contention Second Implementation 583
Lock Contention Third Implementation 593
Lock Contention Fourth Implementation 603
Lock Contention Fifth Implementation 613
First Resizing Variant 624
Second Resizing Variant 636
Increasing Parallelism Single-Threaded Implementation 647
Increasing Parallelism Multithreaded Implementation 657
Index 669