Software Performance

This course teaches how the various layers of a computer system interact and affect the resulting performance. It performs two cuts down the system stack: one about the ‘state’ and the other about the ‘behavior’ of a system. The discussion of ‘state’ investigates memory usage of applications, leak detection, garbage collection, virtual memory management, and cache performance. The discussion of ‘behavior’ investigates call graphs, dynamic class loading, shared libraries and dynamic linking, control flow graphs, exception handling, compiler optimizations, and branch prediction.

The course is excellent.

From each assignment I learn a lot and I discover the topic even after the submission just because I was inspired by the teacher!

Among all courses it seems to be one of the most effective one in terms of gained knowledge and skills per time unit.

Structure of the course is wisely constructed and assignments are built regarding the students’ feedback and the collaboration is very efficient.

– Good stuff from course evaluations

The course uses Java virtual machines and their internal operation as a running example and teaches basic static and dynamic program analysis techniques. Given the quantitative aspects of performance, the course introduces basic instrumentation and measurement tools, experimentation and evaluation approaches, and data analysis and visualization techniques.