In this chapter, we learned about various bottlenecks which can cause performance issues. In particular, you need to focus on various areas such as CPU infrastructure, I/O operations, database operations, network utilization, and memory utilization. It is important to understand the type of operation your algorithm is performing. Based on that you need to optimize your code, so it wont take much of the resources.
In the next chapter, we will learn about the various troubleshooting and error handling techniques, logging, and then about thread dump and how to analyze it.