Urs Hölzle

Below is a list of scientific papers I’ve authored or co-authored. I try to keep it up to date but you may want to do a Google Scholar search to see an up-to-date list.
Follow me on Twitter.

Computer Architecture and Networking

The Datacenter as a Computer: An Introduction to the Design of Warehouse-Scale Machines, 3nd Edition (Morgan Claypool, 2018) (available for free on Google Play)

Jupiter rising: a decade of clos topologies and centralized control in Google’s datacenter network (ACM SIGCOMM, 2015)

B4: Experience with a Globally-Deployed Software Defined WAN (ACM SIGCOMM, 2013)

The Datacenter as a Computer: An Introduction to the Design of Warehouse-Scale Machines, 2nd Edition (Morgan Claypool, 2013; replaced by 2018 edition)

OpenFlow at Google (Open Networking Summit, 2012) (video)

Brawny cores still beat wimpy cores, most of the time (IEEE MICRO, 2010)

The Datacenter as a Computer: An Introduction to the Design of Warehouse-Scale Machines (Morgan Claypool, 2009; replaced by 2013 edition)

The case for energy-proportional computing (IEEE Computer, 2003)

Web search for a planet: The Google cluster architecture (IEEE Computer, 2003)

Multi-stage Cascaded Prediction (Europar ’99)

The Cascaded Predictor: Economic and Adaptive Branch Target Prediction (MICRO-31)

Improving Indirect Branch Prediction With Source- and Arity-based Classification and Cascaded Prediction (Technical Report)

Accurate Indirect Branch Prediction (ISCA ’98)

Limits of Indirect Branch Prediction (Technical Report)

Do object-oriented languages need special hardware support? (ECOOP ’95)

Programming Language Implementation

Removing Unnecessary Synchronization in Java (OOPSLA ’99)

Reducing Transfer Delay Using Java Class File Splitting and Prefetching (OOPSLA ’99)

A Study of the Allocation Behavior of the SPECjvm98 Java Benchmarks (ECOOP ’99)

The Space Overhead of Customization (Technical Report)

Java on Steroids: Sun’s High-Performance Java Implementation (HotChips IX, August 1997)

Reconciling Responsiveness with Performance in Pure Object-Oriented Languages (TOPLAS 1996)

Dynamic vs. Static Optimization Techniques for Object-Oriented Languages (TAPOS 1996)

Eliminating Virtual Function Calls in C++ Programs (ECOOP ’96)

The Direct Cost of Virtual Function Calls in C++ (OOPSLA ’96)

Type Feedback vs. Concrete Type Analysis: A Comparison of Optimization Techniques for Object-Oriented Languages (OOPSLA ’95)

Minimizing Row Displacement Dispatch Tables (OOPSLA ’95)

Message Dispatch on Pipelined Processors (ECOOP ’95)

Optimizing Dynamically-Dispatched Calls with Run-Time Type Feedback (PLDI ’94)

Adaptive Optimization for Self: Reconciling High Performance with Exploratory Programming (Ph.D. thesis, Stanford University)

A Third-Generation Self Implementation (OOPSLA ’94)

A Fast Write Barrier for Generational Garbage Collectors (OOPSLA ’93 GC Workshop)

Debugging Optimized Code with Dynamic Deoptimization (PLDI ’92)

Object, Message, and Performance: How They Coexist in Self (IEEE Computer 1992)

Optimizing Dynamically-Typed Object-Oriented Programming Languages with Polymorphic Inline Caches (ECOOP ’91)

Software Engineering and Tools

Monkey see, monkey do: a tool for TCP tracing and replaying (USENIX ’04)

Load-Time Adaptation: Efficient and Non-Intrusive Language Extension for Virtual Machines (Technical Report)

Dynamic Query-Based Debugging (ECOOP ’99)

Adding Contracts To Java with Handshake (Technical Report)

jContractor: A Reflective Java Library to Support Design By Contract (Reflection ’99)

Implementing Binary Component Adaptation for Java (Technical Report)

Binary Component Adaptation (ECOOP ’98)

Query-Based Debugging of Object-Oriented Programs (OOPSLA ’97)

Supporting the Integration and Evolution of Components Through Binary Component Adaptation (Technical Report)

Integrating Independently-Developed Components in Object-Oriented Languages (ECOOP ’93)