In the previous chapters, we saw how to develop a Java EE application to ensure it could scale later using multiple threads, asynchronous handling, pooled resources, and so on. We also saw how to get metrics on the performance and resource (CPU, memory) usage of your application and optimize the performance thanks to JVM or container tuning, as well as more aggressive techniques such as adding caching to your application.
At this point, you should be able to work on the performance. However it does not mean you are safe to get surprises when going into production. The main reason is that the work we talked about previously is rarely done in an environment close enough to the production or final environment the application will be deployed to.
To avoid these surprises, benchmarks can (or should) be organized, but it is not as easy as taking all we...