Description: Lecture, four hours; outside study, eight hours. Requisite: course 132. Introduction to static analysis of object-oriented programs and its usage for optimization and bug finding. Class hierarchy analysis, rapid type analysis, equality-based analysis, subset-based analysis, flow-insensitive and flow-sensitive analysis, context-insensitive and context-sensitive analysis. Soundness proofs for static analyses. Efficient data structures for static analysis information such as directed graphs and binary decision diagrams. Flow-directed method inlining, type-safe method inlining, synchronization optimization, deadlock detection, security vulnerability detection. Formal specification and implementation of variety of static analyses, as well as readings from recent research literature on modern applications of static analysis. Letter grading.