On this course you will learn how to develop software in Java with performance as a first class quality attribute. The quality of software performance is measured in terms of throughput, response time, and scalability in the context of resource utilisation. The major resources are networking, storage, memory, and CPU - including the abstractions we access them including operating systems, virtual machines, and core libraries.
Good performance is the result of software that utilises the computing resources in an efficient and sympathetic manner. The course will cover some fundamental theory and then apply it in the context of each of the computing resources. We will write tests to exercise each resource so we can measure performance for usage patterns and guide the development by profiling to understand costs.
The computing resources do not exist in isolation. Systems theory comes into play when they interact based on the demands of the software. We will introduce a methodology to identify bottlenecks and then change code to balance utilisation so that the throughput, response time, and scalability can be improved for a whole system.