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)