VLDB 2026 Research / reviewers in the wild / expert
Samuel Z. Guyer
dblp:43/228
· DBLP profile ↗
21ranked-venue papers
5as first author
1since 2021 · last 2021
—ORCID · none
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 19 · 4 first-author · 1 since 2021Human-computer interaction and ubiquitous computing · 4Applied, interdisciplinary, general and emerging computing · 1 · 1 first-author
Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.
| Software engineering, system software, and programming languages
11 papers |
Program analysis · 35% Operating systems · 33% Runtime systems and virtual machines · 17% | |
| Computer architecture, parallel and distributed computing, and storage systems
2 papers |
Performance modeling and evaluation · 84% Memory systems · 8% High-performance computing · 7% |
Topics — the 19 heaviest of 24, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Operating systems › resource management
memory management |
0.8 | 2 | 2021 | Permchecker: a toolchain for debugging memory managers with typestate · Proc. ACM Program. Lang. 2021 Prioritized garbage collection: explicit GC support for software caches · OOPSLA 2016 |
Runtime systems and virtual machines
garbage collection |
0.6 | 5 | 2016 | Prioritized garbage collection: explicit GC support for software caches · OOPSLA 2016 What can the GC compute efficiently?: a language for heap assertions at GC time · OOPSLA 2010 GC assertions: using the garbage collector to check heap properties · PLDI 2009 |
Operating systems › resource management › memory management
dynamic memory allocation |
0.5 | 1 | 2021 | Permchecker: a toolchain for debugging memory managers with typestate · Proc. ACM Program. Lang. 2021 |
Program analysis › type-based analysis
typestate analysis |
0.5 | 1 | 2021 | Permchecker: a toolchain for debugging memory managers with typestate · Proc. ACM Program. Lang. 2021 |
Program analysis
dynamic analysis |
0.4 | 4 | 2011 | Asynchronous assertions · OOPSLA 2011 Breadcrumbs: efficient context sensitivity for dynamic bug detection analyses · PLDI 2010 What can the GC compute efficiently?: a language for heap assertions at GC time · OOPSLA 2010 |
Program analysis › static analysis
bug detection |
0.1 | 2 | 2011 | Breadcrumbs: efficient context sensitivity for dynamic bug detection analyses · PLDI 2010 Asynchronous assertions · OOPSLA 2011 |
Program verification › dynamic verification › runtime verification
assertion checking |
0.1 | 1 | 2011 | Asynchronous assertions · OOPSLA 2011 |
Concurrent programming
concurrency bugs |
0.1 | 1 | 2011 | Asynchronous assertions · OOPSLA 2011 |
Program analysis › static analysis › bug detection
dynamic bug detection |
0.1 | 1 | 2010 | Breadcrumbs: efficient context sensitivity for dynamic bug detection analyses · PLDI 2010 |
Program analysis
error detection |
0.1 | 1 | 2009 | GC assertions: using the garbage collector to check heap properties · PLDI 2009 |
Programming languages and type systems
managed languages |
0.1 | 1 | 2016 | Prioritized garbage collection: explicit GC support for software caches · OOPSLA 2016 |
Debugging and program repair
fault localization |
0.1 | 1 | 2007 | Tracking bad apples: reporting the origin of null and undefined value errors · OOPSLA 2007 |
Program analysis › static analysis
pointer analysis |
0.1 | 1 | 2006 | Free-Me: a static analysis for automatic individual object reclamation · PLDI 2006 |
Performance modeling and evaluation
benchmarking |
0.1 | 1 | 2006 | The DaCapo benchmarks: java benchmarking development and analysis · OOPSLA 2006 |
Performance modeling and evaluation › benchmarking › benchmark design
benchmark suite design |
0.1 | 1 | 2006 | The DaCapo benchmarks: java benchmarking development and analysis · OOPSLA 2006 |
Performance modeling and evaluation
workload characterization |
0.1 | 1 | 2006 | The DaCapo benchmarks: java benchmarking development and analysis · OOPSLA 2006 |
Runtime systems and virtual machines › object representation
object colocation |
0.0 | 1 | 2004 | Finding your cronies: static analysis for dynamic object colocation · OOPSLA 2004 |
High-performance computing › numerical linear algebra
parallel linear algebra |
0.0 | 1 | 2005 | Broadway: A Compiler for Exploiting the Domain-Specific Semantics of Software Libraries · Proc. IEEE 2005 |
Runtime systems and virtual machines › garbage collection
generational garbage collection |
0.0 | 1 | 2004 | Finding your cronies: static analysis for dynamic object colocation · OOPSLA 2004 |
Methods — techniques the papers use, named apart from their topics
typestate annotation · 0.5dynamic binary instrumentation · 0.5bug injection · 0.5explicit GC support · 0.2snapshot consistency · 0.1checking threads · 0.1logic-based language design · 0.1garbage collection integration · 0.1context encoding · 0.1garbage collection assertions · 0.1time-series metrics · 0.1statistical metrics · 0.1annotation-based compilation · 0.1
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2021 | Permchecker: a toolchain for debugging memory managers with typestateabstractDynamic memory managers are a crucial component of almost every modern software system. In addition to implementing efficient allocation and reclamation, memory managers provide the essential abstraction of memory as distinct objects, which underpins the properties of memory safety and type safety. Bugs in memory managers, while not common, are extremely hard to diagnose and fix. One reason is that their implementations often involve tricky pointer calculations, raw memory manipulation, and complex memory state invariants. While these properties are often documented, they are not specified in any precise, machine-checkable form. A second reason is that memory manager bugs can break the client application in bizarre ways that do not immediately implicate the memory manager at all. A third reason is that existing tools for debugging memory errors, such as Memcheck, cannot help because they rely on correct allocation and deallocation information to work. In this paper we present Permchecker, a tool designed specifically to detect and diagnose bugs in memory managers. The key idea in Permchecker is to make the expected structure of the heap explicit by associating typestates with each piece of memory. Typestate captures elements of both type (e.g., page, block, or cell) and state (e.g., allocated, free, or forwarded). Memory manager developers annotate their implementation with information about the expected typestates of memory and how heap operations change those typestates. At runtime, our system tracks the typestates and ensures that each memory access is consistent with the expected typestates. This technique detects errors quickly, before they corrupt the application or the memory manager itself, and it often provides accurate information about the reason for the error. The implementation of Permchecker uses a combination of compile-time annotation and instrumentation, and dynamic binary instrumentation (DBI). Because the overhead of DBI is fairly high, Permchecker is suitable for a testing and debugging setting and not for deployment. It works on a wide variety of existing systems, including explicit malloc/free memory managers and garbage collectors, such as those found in JikesRVM and OpenJDK. Since bugs in these systems are not numerous, we developed a testing methodology in which we automatically inject bugs into the code using bug patterns derived from real bugs. This technique allows us to test Permchecker on hundreds or thousands of buggy variants of the code. We find that Permchecker effectively detects and localizes errors in the vast majority of cases; without it, these bugs result in strange, incorrect behaviors usually long after the actual error occurs. Karl Cronburg, Samuel Z. Guyer |
Proc. ACM Program. Lang. | 2 |
| 2019 | Floorplan: spatial layout in memory management systemsabstractIn modern runtime systems, memory layout calculations are hand-coded in systems languages. Primitives in these languages are not powerful enough to describe a rich set of layouts, leading to reliance on ad-hoc macros, numerous interrelated static constants, and other boilerplate code. Memory management policies must also carefully orchestrate their application of address calculations in order to modify memory cooperatively, a task ill-suited to low-level systems languages at hand which lack proper safety mechanisms. Karl Cronburg, Samuel Z. Guyer |
GPCE | 2 |
| 2016 | Prioritized garbage collection: explicit GC support for software cachesabstractProgrammers routinely trade space for time to increase performance, often in the form of caching or memoization. In managed languages like Java or JavaScript, however, this space-time tradeoff is complex. Using more space translates into higher garbage collection costs, especially at the limit of available memory. Existing runtime systems provide limited support for space-sensitive algorithms, forcing programmers into difficult and often brittle choices about provisioning. Diogenes Nunez, Samuel Z. Guyer, Emery D. Berger |
OOPSLA | 2 |
| 2016 | An Interactive Microarray Call-Graph VisualizationabstractIn this paper we present an interactive call-graph visualization tool for viewing large programs. Our space-filling grid-based visualization shows the functions of a programs call-graph. The grid view provides an overview of all of the methods, allowing the user to investigate and view subsets of functions, and finally jump to source code for more details on demand. Our tool assists programmers by reducing large call graphs into smaller subgraphs with function relationships that matter for program comprehension. In our benchmarks, we view and explore code relationships in programs with 18,720 functions at interactive frame rates. We provide two use cases with several findings on investigating profile-guided optimizations in C++ and critical sections in concurrent Java programs. Our software visualization tool is Java based and portable across multiple platforms. Michael D. Shah, Samuel Z. Guyer |
VISSOFT | 2 |
| 2016 | Critical Section Investigator: Building Story Visualizations with Program TracesabstractDetecting performance problems that infrequently occur can be very difficult with traditional profilers. Most profilers only show the average time of execution or the total time a method contributes to the overall program's execution time. Most profilers do not explain or show why different control paths within a method executed may have resulted in variable execution times. When debugging concurrent programs for performance problems, the complexity and variability in execution time can potentially be even greater. In this paper we take a first step in visualizing individual method's different execution paths within multithreaded Java programs. We restrict our domain to looking at critical sections for this initial analysis, as variability in critical sections may cause more noticeable performance variation. Our software visualization tool, Critical Section Investigator (CSI), builds on the visualization and interaction techniques in previous works like KCachegrind with several enhancements. The result of our work is the first tool to our knowledge that visually shows potential performance differences in synchronized methods in Java programs using a profiling and storytelling structure. Michael D. Shah, Samuel Z. Guyer |
VISSOFT | 2 |
| 2014 | Metaphors we teach byabstractIn this paper we present an initial study of how metaphors are used by university-level Computer Science instructors. The goal of this research is to gain a better understanding of the role that metaphors play in Computer Science education, to catalog the kinds of metaphors that are used, and to assess their effectiveness in supporting learning. We interviewed 10 educators in Computer Science about the metaphors they have used in the classroom, with a focus on introductory "CS1" programming courses. We analyze these interviews with an existing theory of metaphors, which provides a framework for describing their structure and features. The theory predicts that most metaphors have limitations, and eventually fall apart. Therefore, we also asked educators to assess how far they could push their metaphors with and to describe what happens at the breaking point. Our preliminary findings provide a foundation to inform and guide more in-depth analyses in the future. Joseph P. Sanford, Aaron Tietz, Saad Farooq, Samuel Z. Guyer, R. Benjamin Shapiro |
SIGCSE | 4 |
| 2013 | Elephant tracks: portable production of complete and precise gc tracesabstractWe present Elephant Tracks (ET), a dynamic program analysis tool for Java that produces detailed traces of garbage collection-related events, including object allocations, object deaths, and pointer updates. Like prior work, our tracing tool is based on the Merlin algorithm [6,7], but offers several substantial new capabilities. First, it is much more precise than previous tools: it traces method entries and exits and measures time in terms of them, allowing it to place events precisely in the context of the program structure. Second, it is implemented using a combination of JVM Tool Interface (JVMTI)[13] callbacks and bytecode rewriting, and works with any standard JVM. Finally, it produces complete traces, including weak references, events from the Java Native Interface and sun.misc.Unsafe, and VM start up objects. In this paper we also explore the general design space of tracing tools, and carefully define the execution model that the traces represent. Nathan P. Ricci, Samuel Z. Guyer, J. Eliot B. Moss |
ISMM | 2 |
| 2013 | Visualizing the allocation and death of objectsabstractWe present memory allocation and death plots, a visualization technique for showing both which method an object is allocated in a Java program, and in which method that object eventually dies. This relates the place in a program's execution where memory is first used to the place it is no longer used, thus helping the programmer to better understand the memory behavior of a program. Raoul L. Veroy, Nathan P. Ricci, Samuel Z. Guyer |
VISSOFT | 3 |
| 2012 | new Scala() instance of Java: a comparison of the memory behaviour of Java and Scala programsabstractWhile often designed with a single language in mind, managed runtimes like the Java virtual machine (JVM) have become the target of not one but many languages, all of which benefit from the runtime's services. One of these services is automatic memory management. In this paper, we compare and contrast the memory behaviour of programs written in Java and Scala, respectively, two languages which both target the same platform: the JVM. We both analyze core object demographics like object lifetimes as well as secondary properties of objects like their associated monitors and identity hash-codes. We find that objects in Scala programs have lower survival rates and higher rates of immutability, which is only partly explained by the memory behaviour of objects representing closures or boxed primitives. Other metrics vary more by benchmark than language. Andreas Sewe, Mira Mezini, Aibek Sarimbekov, Danilo Ansaloni, Walter Binder, Nathan P. Ricci, Samuel Z. Guyer |
ISMM | 7 |
| 2011 | Asynchronous assertionsabstractAssertions are a familiar and widely used bug detection technique. Traditional assertion checking, however, is performed synchronously, imposing its full cost on the runtime of the program. As a result, many useful kinds of checks, such as data structure invariants and heap analyses, are impractical because they lead to extreme slowdowns. We present a solution that decouples assertion evaluation from program execution: assertions are checked asynchronously by separate checking threads while the program continues to execute. Our technique guarantees that asynchronous evaluation always produces the same result as synchronous evaluation, even if the program concurrently modifies the program state. The checking threads evaluate each assertion on a consistent snapshot of the program state as it existed at the moment the assertion started. Edward Aftandilian, Samuel Z. Guyer, Martin T. Vechev, Eran Yahav |
OOPSLA | 2 |
| 2010 | What can the GC compute efficiently?: a language for heap assertions at GC timeabstractWe present the DeAL language for heap assertions that are efficiently evaluated during garbage collection time. DeAL is a rich, declarative, logic-based language whose programs are guaranteed to be executable with good whole-heap locality, i.e., within a single traversal over every live object on the heap and a finite neighborhood around each object. As a result, evaluating DeAL programs incurs negligible cost: for simple assertion checking at each garbage collection, the end-to-end execution slowdown is below 2%. DeAL is integrated into Java as a VM extension and we demonstrate its efficiency and expressiveness with several applications and properties from the past literature. Christoph Reichenbach, Neil Immerman, Yannis Smaragdakis, Edward Aftandilian, Samuel Z. Guyer |
OOPSLA | 5 |
| 2010 | Breadcrumbs: efficient context sensitivity for dynamic bug detection analysesabstractCalling context--the set of active methods on the stack--is critical for understanding the dynamic behavior of large programs. Dynamic program analysis tools, however, are almost exclusively context insensitive because of the prohibitive cost of representing calling contexts at run time. Deployable dynamic analyses, in particular, have been limited to reporting only static program locations. Michael D. Bond, Graham Z. Baker, Samuel Z. Guyer |
PLDI | 3 |
| 2009 | GC assertions: using the garbage collector to check heap propertiesabstractThis paper introduces GC assertions, a system interface that programmers can use to check for errors, such as data structure invariant violations, and to diagnose performance problems, such as memory leaks. GC assertions are checked by the garbage collector, which is in a unique position to gather information and answer questions about the lifetime and connectivity of objects in the heap. By piggybacking on existing garbage collector computations, our system is able to check heap properties with very low overhead -- around 3% of total execution time -- low enough for use in a deployed setting. Edward Aftandilian, Samuel Z. Guyer |
PLDI | 2 |
| 2007 | Tracking bad apples: reporting the origin of null and undefined value errorsabstractPrograms sometimes crash due to unusable values, for example, when Java and C# programs dereference null pointers and when C and C++ programs use undefined values to affect program behavior. A stack trace produced on such a crash identifies the effect of the unusable value, not its cause, and is often not much help to the programmer. Michael D. Bond, Nicholas Nethercote, Stephen W. Kent, Samuel Z. Guyer, Kathryn S. McKinley |
OOPSLA | 4 |
| 2006 | Efficient Flow-Sensitive Interprocedural Data-Flow Analysis in the Presence of Pointers
Teck Bok Tok, Samuel Z. Guyer, Calvin Lin |
CC | 2 |
| 2006 | The DaCapo benchmarks: java benchmarking development and analysisabstractSince benchmarks drive computer science research and industry product development, which ones we use and how we evaluate them are key questions for the community. Despite complex runtime tradeoffs due to dynamic compilation and garbage collection required for Java programs, many evaluations still use methodologies developed for C, C++, and Fortran. SPEC, the dominant purveyor of benchmarks, compounded this problem by institutionalizing these methodologies for their Java benchmark suite. This paper recommends benchmarking selection and evaluation methodologies, and introduces the DaCapo benchmarks, a set of open source, client-side Java benchmarks. We demonstrate that the complex interactions of (1) architecture, (2) compiler, (3) virtual machine, (4) memory management, and (5) application require more extensive evaluation than C, C++, and Fortran which stress (4) much less, and do not require (3). We use and introduce new value, time-series, and statistical metrics for static and dynamic properties such as code complexity, code size, heap composition, and pointer mutations. No benchmark suite is definitive, but these metrics show that DaCapo improves over SPEC Java in a variety of ways, including more complex code, richer object behaviors, and more demanding memory system requirements. This paper takes a step towards improving methodologies for choosing and evaluating benchmarks to foster innovation in system design and implementation for Java and other managed languages. Steve Blackburn, Robin Garner, Chris Hoffmann, Asjad M. Khan, Kathryn S. McKinley, Rotem Bentzur, Amer Diwan, Daniel Feinberg, Daniel Frampton, Samuel Z. Guyer, Martin Hirzel, Antony L. Hosking, Maria Jump, Han Bok Lee, J. Eliot B. Moss, Aashish Phansalkar, Darko Stefanovic, Thomas VanDrunen, Daniel von Dincklage, Ben Wiedermann |
OOPSLA | 10 |
| 2006 | Free-Me: a static analysis for automatic individual object reclamationabstractGarbage collection has proven benefits, including fewer memory related errors and reduced programmer effort. Garbage collection, however, trades space for time. It reclaims memory only when it is invoked: invoking it more frequently reclaims memory quickly, but incurs a significant cost; invoking it less frequently fills memory with dead objects. In contrast, explicit memory management provides prompt low cost reclamation, but at the expense of programmer effort.This work comes closer to the best of both worlds by adding novel compiler and runtime support for compiler inserted frees to a garbage-collected system. The compiler's free-me analysis identifies when objects become unreachable and inserts calls to free. It combines a lightweight pointer analysis with liveness information that detects when short-lived objects die. Our approach differs from stack and region allocation in two crucial ways. First, it frees objects incrementally exactly when they become unreachable, instead of based on program scope. Second, our system does not require allocation-site lifetime homogeneity, and thus frees objects on some paths and not on others. It also handles common patterns: it can free objects in loops and objects created by factory methods.We evaluate free() variations for free-list and bump-pointer allocators. Explicit freeing improves performance by promptly reclaiming objects and reducing collection load. Compared to marksweep alone, free-me cuts total time by 22% on average, collector time by 50% to 70%, and allows programs to run in 17% less memory. This combination retains the software engineering benefits of garbage collection while increasing space efficiency and improving performance, and thus is especially appealing for real-time and space constrained systems. Samuel Z. Guyer, Kathryn S. McKinley, Daniel Frampton |
PLDI | 1 |
| 2005 | Broadway: A Compiler for Exploiting the Domain-Specific Semantics of Software LibrariesabstractThis paper describes the Broadway compiler and our experiences in using it to support domain-specific compiler optimizations. Our goal is to provide compiler support for a wide range of domains and to do so in the context of existing programming languages. Therefore, we focus on a technique that we call library-level optimization, which recognizes and exploits the domain-specific semantics of software libraries. The key to our system is a separation of concerns: compiler expertise is built into the Broadway compiler machinery, while domain expertise resides in separate annotation files that are provided by domain experts. We describe how this system can optimize parallel linear algebra codes written using the PLAPACK library. We find that our annotations effectively capture PLAPACK expertise at several levels of abstraction and that our compiler can automatically apply this expertise to produce considerable performance improvements. Our approach shows that the abstraction and modularity found in modern software can be as much an asset to the compiler as it is to the programmer. Samuel Z. Guyer, Calvin Lin |
Proc. IEEE | 1 |
| 2005 | Error checking with client-driven pointer analysis
Samuel Z. Guyer, Calvin Lin |
Sci. Comput. Program. | 1 |
| 2004 | Finding your cronies: static analysis for dynamic object colocationabstractThis paper introduces dynamic object colocation, an optimization to reduce copying costs in generational and other incremental garbage collectors by allocating connected objects together in the same space. Previous work indicates that connected objects belong together because they often have similar lifetimes. Generational collectors, however, allocate all new objects in a nursery space. If these objects are connected to data structures residing in the mature space, the collector must copy them. Our solution is a cooperative optimization that exploits compiler analysis to make runtime allocation decisions. The compiler analysis discovers potential object connectivity for newly allocated objects. It then replaces these allocations with calls to coalloc, which takes an extra parameter called the colocator object. At runtime, coalloc determines the location of the colocator and allocates the new object together with it in either the nursery or mature space. Unlike pretenuring, colocation makes precise per-object allocation decisions and does not require lifetime analysis or allocation site homogeneity. Experimental results for SPEC Java benchmarks using Jikes RVM show colocation can reduce garbage collection time by 50% to 75%, and total performance by up to 1%. Samuel Z. Guyer, Kathryn S. McKinley |
OOPSLA | 1 |
| 2003 | Client-Driven Pointer Analysis
Samuel Z. Guyer, Calvin Lin |
SAS | 1 |