Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data.

J. Eliot B. Moss

dblp:m/JEliotBMoss · also Eliot Moss · DBLP profile ↗
← Back
64ranked-venue papers
10as first author
3since 2021 · last 2024
0000-0001-6637-3641ORCID · verified

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 44 · 5 first-author · 1 since 2021Systems, architecture and hardware · 10Databases, data management, data science and information retrieval · 6 · 4 first-authorArtificial intelligence and machine learning · 3 · 1 first-authorHuman-computer interaction and ubiquitous computing · 2 · 1 since 2021Theory of computation · 1 · 1 since 2021

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
37 papers
Runtime systems and virtual machines · 54% Concurrent programming · 11% Program analysis · 9%
Computer architecture, parallel and distributed computing, and storage systems
23 papers
Performance modeling and evaluation · 50% Parallel and multicore computing · 23% Memory systems · 13%

Topics — the 30 heaviest of 79, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Runtime systems and virtual machines
garbage collection
1.2202019
Optimal Choice of When to Garbage Collect · ACM Trans. Program. Lang. Syst. 2019
Assessing the limits of program-specific garbage collection performance · PLDI 2016
Profile-based pretenuring · ACM Trans. Program. Lang. Syst. 2007
Runtime systems and virtual machines › garbage collection
generational garbage collection
0.562019
Optimal Choice of When to Garbage Collect · ACM Trans. Program. Lang. Syst. 2019
MC2: high-performance garbage collection for memory-constrained environments · OOPSLA 2004
Mark-copy: fast copying GC with less space overhead · OOPSLA 2003
Program analysis
static analysis
0.422019
PlanAlyzer: assessing threats to the validity of online experiments · Proc. ACM Program. Lang. 2019
Simple and Effective Analysis of Statically Typed Object-Oriented Programs · OOPSLA 1996
Runtime systems and virtual machines › garbage collection
garbage collection scheduling
0.212016
Assessing the limits of program-specific garbage collection performance · PLDI 2016
Concurrent programming › transactional memory
nested transactions
0.212016
Hybrid STM/HTM for nested transactions on OpenJDK · OOPSLA 2016
Concurrent programming
transactional memory
0.212016
Hybrid STM/HTM for nested transactions on OpenJDK · OOPSLA 2016
Performance modeling and evaluation › markov models
markov decision process
0.212016
Assessing the limits of program-specific garbage collection performance · PLDI 2016
Runtime systems and virtual machines › garbage collection
copying garbage collection
0.252004
MC2: high-performance garbage collection for memory-constrained environments · OOPSLA 2004
The garbage collection advantage: improving program locality · OOPSLA 2004
Mark-copy: fast copying GC with less space overhead · OOPSLA 2003
Empirical software engineering
causal inference
0.112019
PlanAlyzer: assessing threats to the validity of online experiments · Proc. ACM Program. Lang. 2019
Empirical software engineering
experimental methodology
0.112019
PlanAlyzer: assessing threats to the validity of online experiments · Proc. ACM Program. Lang. 2019
Runtime systems and virtual machines › garbage collection
pretenuring
0.122007
Profile-based pretenuring · ACM Trans. Program. Lang. Syst. 2007
Pretenuring for Java · OOPSLA 2001
Runtime systems and virtual machines › dynamic compilation
just-in-time compilation
0.122007
Design, implementation, and evaluation of a compilation server · ACM Trans. Program. Lang. Syst. 2007
Inducing heuristics to decide whether to schedule · PLDI 2004
Compilers and program optimization
instruction scheduling
0.132004
Inducing heuristics to decide whether to schedule · PLDI 2004
Scheduling Straight-Line Code Using Reinforcement Learning and Rollouts · NIPS 1998
Learning to Schedule Straight-Line Code · NIPS 1997
Electronic design automation › high-level synthesis
scheduling
0.112008
Redline: First Class Support for Interactivity in Commodity Operating Systems · OSDI 2008
Runtime systems and virtual machines › virtual machine implementation
java virtual machine
0.122007
Design, implementation, and evaluation of a compilation server · ACM Trans. Program. Lang. Syst. 2007
Garbage Collection and Local Variable Type-Precision and Liveness in Java Virtual Machines · PLDI 1998
Machine learning › Reinforcement learning › dynamic programming
policy iteration
0.112016
Assessing the limits of program-specific garbage collection performance · PLDI 2016
Parallel and multicore computing › transactional memory
hardware transactional memory
0.112016
Hybrid STM/HTM for nested transactions on OpenJDK · OOPSLA 2016
Compilers and program optimization
dynamic optimization
0.112007
Design, implementation, and evaluation of a compilation server · ACM Trans. Program. Lang. Syst. 2007
Parallel and multicore computing
concurrent programming
0.112007
Open nesting in software transactional memory · PPoPP 2007
Parallel and multicore computing › transactional memory
software transactional memory
0.112007
Open nesting in software transactional memory · PPoPP 2007
Performance modeling and evaluation
benchmarking
0.122006
The DaCapo benchmarks: java benchmarking development and analysis · OOPSLA 2006
A Comparative Performance Evaluation of Write Barrier Implementations · OOPSLA 1992
Performance modeling and evaluation
workload characterization
0.132006
The DaCapo benchmarks: java benchmarking development and analysis · OOPSLA 2006
Memory Subsystem Performance of Programs Using Copying Garbage Collection · POPL 1994
Working with Persistent Objects: To Swizzle or Not to Swizzle · IEEE Trans. Software Eng. 1992
Runtime systems and virtual machines › runtime memory management
object lifetime analysis
0.112006
Generating object lifetime traces with Merlin · ACM Trans. Program. Lang. Syst. 2006
Services computing and microservices
trace generation
0.112006
Generating object lifetime traces with Merlin · ACM Trans. Program. Lang. Syst. 2006
Operating systems › resource management › memory management
virtual memory
0.112006
CRAMM: Virtual Memory Support for Garbage-Collected Applications · OSDI 2006
Performance modeling and evaluation › benchmarking › benchmark design
benchmark suite design
0.112006
The DaCapo benchmarks: java benchmarking development and analysis · OOPSLA 2006
Performance modeling and evaluation
simulation
0.122006
Error-free garbage collection traces: how to cheat and not get caught · SIGMETRICS 2002
Generating object lifetime traces with Merlin · ACM Trans. Program. Lang. Syst. 2006
Performance modeling and evaluation › simulation › discrete-event simulation
trace-driven simulation
0.012002
Error-free garbage collection traces: how to cheat and not get caught · SIGMETRICS 2002
Parallel and multicore computing
transactional memory
0.022007
Open nesting in software transactional memory · PPoPP 2007
Transactional Memory: Architectural Support for Lock-Free Data Structures · ISCA 1993
Memory systems
memory management
0.022003
Mark-copy: fast copying GC with less space overhead · OOPSLA 2003
Beltway: Getting Around Garbage Collection Gridlock · PLDI 2002

Methods — techniques the papers use, named apart from their topics

reinforcement learning · 0.8markov decision process · 0.8lock elision · 0.5least squares policy iteration · 0.5fallback locking · 0.5static analysis · 0.4heap object graph analysis · 0.4dynamic programming · 0.4domain-specific language analysis · 0.4least-squares policy iteration · 0.2interactivity management · 0.2scheduling · 0.1timestamping · 0.1time-series metrics · 0.1statistical metrics · 0.1rollout · 0.0performance modeling · 0.0measurement · 0.0
YearPublicationVenuePosition
2024 Effect of Deadlines on Student Submission Timelines and Success in a Fully-Online Self-Paced Course
abstract
We analyze the impact of deadline policies on student submission timeliness and success in a self-paced online programming course. The course is for learning a second language (C) after Java or Python and assumes some knowledge of data structures. It targets under- graduates in a four-year computer science degree program. We measure changes in student submission timeliness, assess pass rates, and analyze the effects of a hard mid-term deadline across various submission policies. One analysis measures the percent of time through the term when students submit their assignments. This measure highlights student procrastination. Another metric examines the fraction of students who turn in assignments on time or within specific time frames (within one week, etc.) of a stated or suggested deadline. This offers insights into the impact of deadline policies on submission timeliness. For course offerings without deadlines, we used notional deadlines corresponding to what we would have suggested, for comparison. The deadline policies in this study were: no deadlines, suggested deadlines, deadlines with minor penalties (sometimes allowing one low score to be dropped), and deadlines with minor penalties plus a hard mid-term deadline. We assess the impact of each deadline policy on student procrastina- tion and course completion rates, including effects on withdrawals and incompletes. Defining the pass rate and accounting for student attrition is crucial to accurate assessment of deadline policies. Our findings contribute to understanding effective instructional design in self-paced online learning environments. A key result is that judiciously chosen deadline policies can improve student timeliness and pass rates.
Meng-Chieh Chiu, J. Eliot B. Moss, Timothy Richards
SIGCSE (1)2
2022 Mechanizing Soundness of Off-Policy Evaluation
abstract
There are reinforcement learning scenarios - e.g., in medicine - where we are compelled to be as confident as possible that a policy change will result in an improvement before implementing it. In such scenarios, we can employ off-policy evaluation (OPE). The basic idea of OPE is to record histories of behaviors under the current policy, and then develop an estimate of the quality of a proposed new policy, seeing what the behavior would have been under the new policy. As we are evaluating the policy without actually using it, we have the "off-policy" of OPE. Applying a concentration inequality to the estimate, we derive a confidence interval for the expected quality of the new policy. If the confidence interval lies above that of the current policy, we can change policies with high confidence that we will do no harm. We focus here on the mathematics of this method, by mechanizing the soundness of off-policy evaluation. A natural side effect of the mechanization is both to clarify all the result’s mathematical assumptions and preconditions, and to further develop HOL4’s library of verified statistical mathematics, including concentration inequalities. Of more significance, the OPE method relies on importance sampling, whose soundness we prove using a measure-theoretic approach. In fact, we generalize the standard result, showing it for contexts comprising both discrete and continuous probability distributions.
Jared Yeager, J. Eliot B. Moss, Michael Norrish, Philip S. Thomas
ITP2
2022 Towards a Model Checking Framework for a New Collector Framework
abstract
Garbage collectors provide memory safety, an important step toward program correctness. However, correctness of the collector itself can be challenging to establish, given both the style in which such systems are written and the weakly-ordered memory accesses of modern hardware. One way to maximize benefits is to use a framework in which effort can be focused on the correctness of small, modular critical components from which various collectors may be composed. Full proof of correctness is likely impractical, so we propose to gain a degree of confidence in collector correctness by applying model checking to critical kernels within a garbage collection framework. We further envisage a model framework, paralleling the framework nature of the collector, in hope that it will be easy to create new models for new collectors. We describe here a prototype model structure, and present results of model checking both stop-the-world and snapshot-at-the-beginning concurrent marking. We found useful regularities of model structure, and that models could be checked within possible time and space budgets on capable servers. This suggests that collectors built in a modular style might be model checked, and further that it may be worthwhile to develop a model checking framework with a domain-specific language from which to generate those models.
Bochen Xu, J. Eliot B. Moss, Steve Blackburn
MPLR2
2019 Learning when to garbage collect with random forests
abstract
Generational garbage collectors are one of the most common types of automatic memory management. We can minimize the costs they incur by carefully choosing the points in a program's execution at which they run. However, this decision is generally based on simple, crude heuristics. Instead, we train random forest classifiers to decide when to collect based on features gathered from a running program. This reduces the total cost of collection in both time and space. We demonstrate useful generalization of learned policies to unseen traces of the same program, showing this approach may be fruitful for further investigation.
Nicholas Jacek, J. Eliot B. Moss
ISMM2
2019 PlanAlyzer: assessing threats to the validity of online experiments
abstract
Online experiments have become a ubiquitous aspect of design and engineering processes within Internet firms. As the scale of experiments has grown, so has the complexity of their design and implementation. In response, firms have developed software frameworks for designing and deploying online experiments. Ensuring that experiments in these frameworks are correctly designed and that their results are trustworthy---referred to as internal validity---can be difficult. Currently, verifying internal validity requires manual inspection by someone with substantial expertise in experimental design. We present the first approach for statically checking the internal validity of online experiments. Our checks are based on well-known problems that arise in experimental design and causal inference. Our analyses target PlanOut, a widely deployed, open-source experimentation framework that uses a domain-specific language to specify and run complex experiments. We have built a tool called PlanAlyzer that checks PlanOut programs for a variety of threats to internal validity, including failures of randomization, treatment assignment, and causal sufficiency. PlanAlyzer uses its analyses to automatically generate contrasts, a key type of information required to perform valid statistical analyses over the results of these experiments. We demonstrate PlanAlyzer's utility on a corpus of PlanOut scripts deployed in production at Facebook, and we evaluate its ability to identify threats to validity on a mutated subset of this corpus. PlanAlyzer has both precision and recall of 92% on the mutated corpus, and 82% of the contrasts it generates match hand-specified data.
Emma Tosch, Eytan Bakshy, Emery D. Berger, David D. Jensen, J. Eliot B. Moss
Proc. ACM Program. Lang.5
2019 Optimal Choice of When to Garbage Collect
abstract
We consider the ultimate limits of program-specific garbage collector (GC) performance for real programs. We first characterize the GC schedule optimization problem. Based on this characterization, we develop a linear-time dynamic programming solution that, given a program run and heap size, computes an optimal schedule of collections for a non-generational collector. Using an analysis of a heap object graph of the program, we compute a property of heap objects that we call their pre-birth time. This information enables us to extend the non-generational GC schedule problem to the generational GC case in a way that also admits a dynamic programming solution with cost quadratic in the length of the trace (number of objects allocated). This improves our previously reported approximately optimal result. We further extend the two-generation dynamic program to any number of generations, allowing other generalizations as well. Our experimental results for two generations on traces from Java programs of the DaCapo benchmark suite show that there is considerable promise to reduce garbage collection costs for some programs by developing program-specific collection policies. For a given space budget, optimal schedules often obtain modest but useful time savings, and for a given time budget, optimal schedules can obtain considerable space savings.
Nicholas Jacek, Meng-Chieh Chiu, Benjamin M. Marlin, J. Eliot B. Moss
ACM Trans. Program. Lang. Syst.4
2016 Hybrid STM/HTM for nested transactions on OpenJDK
abstract
Transactional memory (TM) has long been advocated as a promising pathway to more automated concurrency control for scaling concurrent programs running on parallel hardware. Software TM (STM) has the benefit of being able to run general transactional programs, but at the significant cost of overheads imposed to log memory accesses, mediate access conflicts, and maintain other transaction metadata. Recently, hardware manufacturers have begun to offer commodity hardware TM (HTM) support in their processors wherein the transaction metadata is maintained "for free" in hardware. However, HTM approaches are only best-effort: they cannot successfully run all transactional programs, whether because of hardware capacity issues (causing large transactions to fail), or compatibility restrictions on the processor instructions permitted within hardware transactions (causing transactions that execute those instructions to fail). In such cases, programs must include failure-handling code to attempt the computation by some other software means, since retrying the transaction would be futile. Thus, a canonical use of HTM is lock elision: replacing lock regions with transactions, retrying some number of times in the case of conflicts, but falling back to locking when HTM fails for other reasons.
Keith Chapman, Antony L. Hosking, J. Eliot B. Moss
OOPSLA3
2016 Assessing the limits of program-specific garbage collection performance
abstract
We consider the ultimate limits of program-specific garbage collector performance for real programs. We first characterize the GC schedule optimization problem using Markov Decision Processes (MDPs). Based on this characterization, we develop a method of determining, for a given program run and heap size, an optimal schedule of collections for a non-generational collector. We further explore the limits of performance of a generational collector, where it is not feasible to search the space of schedules to prove optimality. Still, we show significant improvements with Least Squares Policy Iteration, a reinforcement learning technique for solving MDPs. We demonstrate that there is considerable promise to reduce garbage collection costs by developing program-specific collection policies.
Nicholas Jacek, Meng-Chieh Chiu, Benjamin M. Marlin, J. Eliot B. Moss
PLDI4
2015 FrenchPress Gives Students Automated Feedback on Java Program Flaws
abstract
We created an Eclipse plug-in called FrenchPress that partially automates the task of giving students feedback on their Java programs. It is designed not for novices but for students taking their second or third Java course: students who know enough Java to write a working program but lack the judgment to recognize bad code when they see it. FrenchPress does not diagnose compile-time or runtime errors, or logical errors that produce incorrect output. It targets silent flaws, flaws the student is unable to identify for himself because nothing in the programming environment alerts him. FrenchPress diagnoses flaws characteristic of programmers who have not yet assimilated the object-oriented idiom. Such shortcomings include misuse of the public modifier, fields that should have been local variables, and instance variables that should have been class constants. Other rules address the all too common misunderstanding of the boolean datatype. FrenchPress delivers explanatory messages in a vocabulary appropriate to the student's current level.
Hannah Blau, J. Eliot B. Moss
ITiCSE2
2013 Elephant tracks: portable production of complete and precise gc traces
abstract
We 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
ISMM3
2009 Classifying Java class transformations for pervasive virtualized access
abstract
The indirection of object accesses is a common theme for target domains as diverse as transparent distribution, persistence, and program instrumentation. Virtualizing accesses to fields and methods (by redirecting calls through accessor and indirection methods) allows interposition of arbitrary code, extending the functionality of an application beyond that intended by the original developer.
Phil McGachey, Antony L. Hosking, J. Eliot B. Moss
GPCE3
2009 Demystifying magic: high-level low-level programming
abstract
The power of high-level languages lies in their abstraction over hardware and software complexity, leading to greater security, better reliability, and lower development costs. However, opaque abstractions are often show-stoppers for systems programmers, forcing them to either break the abstraction, or more often, simply give up and use a different language. This paper addresses the challenge of opening up a high-level language to allow practical low-level programming without forsaking integrity or performance.
Daniel Frampton, Steve Blackburn, Perry Cheng, Robin Garner, David Grove, J. Eliot B. Moss, Sergey I. Salishev
VEE6
2008 Towards universal code generator generation
abstract
One of the most difficult tasks a compiler writer faces is the construction of the code generator. The code generator is that part of the compiler that translates compiler intermediate representation (IR) into instructions for a target machine. Unfortunately, implementing a code generator "by hand" is a difficult, time consuming, and error prone task. The details of both the IR and target instruction set must be carefully considered in order to generate correct and efficient code. This, in turn, requires an expert in both the compiler internals as well as the target machine. Even an expert, however, can produce a code generator that is difficult to verify and debug. In this paper we present a universal approach for automating the construction of correct code generators. In particular, we show that both the compiler IR and target instruction set semantics can be described by a machine description language and leveraged by a heuristic search procedure to derive code generator patterns. We then utilize formal methods to determine if the IR and target sequence pairs that make up these patterns are semantically equivalent.
Timothy Richards, Edward K. Walters II, J. Eliot B. Moss, Trek S. Palmer, Charles C. Weems
IPDPS3
2008 Redline: First Class Support for Interactivity in Commodity Operating Systems
Tongping Liu, Emery D. Berger, Scott F. Kaplan, J. Eliot B. Moss
OSDI5
2008 CASL: A rapid-prototyping language for modern micro-architectures
Edward K. Walters II, J. Eliot B. Moss, Trek S. Palmer, Timothy Richards, Charles C. Weems
Comput. Lang. Syst. Struct.2
2007 Modeling Modern Micro-architectures using CASL
abstract
We overview CASL, the CoGenT architecture specification language, a mixed behavioral-structure architecture description language designed to facilitate fast prototyping and tool generation for computer architectures with deep pipelines and complicated timing. We show how CASL can describe pipelines, dynamic information contexts, and contention using the DLX/MIPS architecture as an example.
Edward K. Walters II, J. Eliot B. Moss, Trek S. Palmer, Timothy Richards, Charles C. Weems
IPDPS2
2007 Open nesting in software transactional memory
abstract
Transactional memory (TM) promises to simplify concurrent programming while providing scalability competitive to fine-grained locking. Language-based constructs allow programmers to denote atomic regions declaratively and to rely on the underlying system to provide transactional guarantees along with concurrency. In contrast with fine-grained locking, TM allows programmers to write simpler programs that are composable and deadlock-free.
Vijay Menon 0002, Ali-Reza Adl-Tabatabai, Antony L. Hosking, Richard L. Hudson, J. Eliot B. Moss, Bratin Saha, Tatiana Shpeisman
PPoPP6
2007 Profile-based pretenuring
abstract
Pretenuring can reduce copying costs in garbage collectors by allocating long-lived objects into regions that the garbage collector will rarely, if ever, collect. We extend previous work on pretenuring as follows: (1) We produce pretenuring advice that is neutral with respect to the garbage collector algorithm and configuration. We thus can and do combine advice from different applications. We find for our benchmarks that predictions using object lifetimes at each allocation site in Java programs are accurate, which simplifies the pretenuring implementation. (2) We gather and apply advice to both applications and Jikes RVM, a compiler and runtime system for Java written in Java. Our results demonstrate that building combined advice into Jikes RVM from different application executions improves performance, regardless of the application Jikes RVM is compiling and executing. This build-time advice thus gives user applications some benefits of pretenuring, without any application profiling. No previous work uses profile feedback to pretenure in the runtime system. (3) We find that application-only advice also consistently improves performance, but that the combination of build-time and application-specific advice is almost always noticeably better. (4) Our same advice improves the performance of generational, Older First, and Beltway collectors, illustrating that it is collector neutral . (5) We include an immortal allocation space in addition to a nursery and older generation, and show that pretenuring to immortal space has substantial benefit.
Steve Blackburn, Matthew Hertz, Kathryn S. McKinley, J. Eliot B. Moss
ACM Trans. Program. Lang. Syst.4
2007 Design, implementation, and evaluation of a compilation server
abstract
Modern JVM implementations interleave execution with compilation of “hot” methods to achieve reasonable performance. Since compilation overhead impacts the execution time of the application and induces run-time pauses, we explore offloading compilation onto a compilation server. In this article, we present the design, implementation, and evaluation of a compilation server that compiles and optimizes Java bytecodes on behalf of its clients. We show that the compilation server provides the following benefits for our benchmark programs: (i) lower execution time by reducing the compilation overhead and by enabling more aggressive optimizations; (ii) lower memory allocation by eliminating allocations due to optimizing compilation and the footprint of the optimizing compiler; (iii) lower execution time of the application due to sharing of profile information across different runs of the same application and runs of different applications. We implemented the compilation server in Jikes RVM, and our results indicate that it can reduce running time by an average of 20.5%, interruptions due to compilation by an average of 81.0%, and dynamic memory allocation by 8.6% for our benchmark programs. Simulation results indicate that our current implementation of the compilation server can handle more than 50 concurrent clients while still allowing them to outperform the best performing adaptive configuration.
Han Bok Lee, Amer Diwan, J. Eliot B. Moss
ACM Trans. Program. Lang. Syst.3
2006 Hybrid Optimizations: Which Optimization Algorithm to Use?
John Cavazos, J. Eliot B. Moss, Michael F. P. O'Boyle
CC2
2006 The DaCapo benchmarks: java benchmarking development and analysis
abstract
Since 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
OOPSLA15
2006 CRAMM: Virtual Memory Support for Garbage-Collected Applications
Emery D. Berger, Scott F. Kaplan, J. Eliot B. Moss
OSDI4
2006 Nested transactional memory: Model and architecture sketches
J. Eliot B. Moss, Antony L. Hosking
Sci. Comput. Program.1
2006 Understanding the behavior of compiler optimizations
abstract
Abstract Compiler optimizations are difficult to implement and add complexity to a compiler. For this reason, compiler writers are selective about implementing them: they implement only the ones that they believe will be beneficial. To support compiler writers in this, we describe a method for measuring the cost and benefits of compiler optimizations, both individually and in synergy with other optimizations. We demonstrate our method by presenting results for the optimizations implemented in the Jikes Research Virtual Machine on the PowerPC and IA32 platforms. Copyright © 2006 John Wiley & Sons, Ltd.
Han Bok Lee, Daniel von Dincklage, Amer Diwan, J. Eliot B. Moss
Softw. Pract. Exp.4
2006 Generating object lifetime traces with Merlin
abstract
Programmers are writing a rapidly growing number of programs in object-oriented languages, such as Java and C#, that require garbage collection. Garbage collection traces and simulation speed up research by enabling deeper understandings of object lifetime behavior and quick exploration and design of new garbage collection algorithms. When generating perfect traces, the brute-force method of computing object lifetimes requires a whole-heap garbage collection at every potential collection point in the program. Because this process is prohibitively expensive, researchers often use granulated traces by collecting only periodically, for example, every 32 KB of allocation.We extend the state of the art for simulating garbage collection algorithms in two ways. First, we develop a systematic methodology for simulation studies of copying garbage collection and present results showing the effects of trace granularity on these simulations. We show that trace granularity often distorts simulated garbage collection results compared with perfect traces. Second, we present and measure the performance of a new algorithm called Merlin for computing object lifetimes. Merlin timestamps objects and later uses the timestamps of dead objects to reconstruct when they died. The Merlin algorithm piggybacks on garbage collections performed by the base system. Experimental results show that Merlin can generate traces over two orders of magnitude faster than the brute-force method which collects after every object allocation. We also use Merlin to produce visualizations of heap behavior that expose new object lifetime behaviors.
Matthew Hertz, Steve Blackburn, J. Eliot B. Moss, Kathryn S. McKinley, Darko Stefanovic
ACM Trans. Program. Lang. Syst.3
2004 Automatic heap sizing: taking real memory into account
abstract
Heap size has a huge impact on the performance of garbage collected applications. A heap that barely meets the application's needs causes excessive GC overhead, while a heap that exceeds physical memory induces paging. Choosing the best heap size a priori is impossible in multiprogrammed environments, where physical memory allocations to processes change constantly. We present an automatic heap-sizing algorithm applicable to different garbage collectors with only modest changes. It relies on an analytical model and on detailed information from the virtual memory manager. The model characterizes the relation between collection algorithm, heap size, and footprint. The virtual memory manager tracks recent reference behavior, reporting the current footprint and allocation to the collector. The collector uses those values as inputs to its model to compute a heap size that maximizes throughput while minimizing paging. We show that our adaptive heap sizing algorithm can substantially reduce running time over fixed-sized heaps.
Matthew Hertz, Emery D. Berger, Scott F. Kaplan, J. Eliot B. Moss
ISMM5
2004 The garbage collection advantage: improving program locality
abstract
As improvements in processor speed continue to outpace improvements in cache and memory speed, poor locality increasingly degrades performance. Because copying garbage collectors move objects, they have an opportunity to improve locality. However, no static copying order is guaranteed to match program traversal orders. This paper introduces online object reordering (OOR) which includes a new dynamic, online class analysis for Java that detects program traversal patterns and exploits them in a copying collector. OOR uses run-time method sampling that drives just-in-time (JIT) compilation. For each hot (frequently executed) method, OOR analysis identifies the hot field accesses. At garbage collection time, the OOR collector then copies referents of hot fields together with their parent. Enhancements include static analysis to exclude accesses in cold basic blocks, heuristics that decay heat to respond to phase changes, and a separate space for hot objects. The overhead of OOR is on average negligible and always less than 2% on Java benchmarks in Jikes RVM with MMTk. We compare program performance of OOR to static class-oblivious copying orders (e.g., breadth and depth first). Performance variation due to static orders is often low, but can be up to 25%. In contrast, OOR matches or improves upon the best static order since its history-based copying tunes memory layout to program traversal.
Xianglong Huang, Steve Blackburn, Kathryn S. McKinley, J. Eliot B. Moss, Zhenlin Wang 0003, Perry Cheng
OOPSLA4
2004 MC2: high-performance garbage collection for memory-constrained environments
abstract
Java is becoming an important platform for memory-constrained consumer devices such as PDAs and cellular phones, because it provides safety and portability. Since Java uses garbage collection, efficient garbage collectors that run in constrained memory are essential. Typical collection techniques used on these devices are mark-sweep and mark-compact. Mark-sweep collectors can provide good throughput and pause times but suffer from fragmentation. Mark-compact collectors prevent fragmentation, have low space overheads, and provide good throughput. However, they can suffer from long pause times. Copying collectors can provide higher throughput than either of these techniques, but because of their high space overhead, they previously were unsuitable for memory-constrained devices. This paper presents MC2 (Memory-Constrained Copying), a copying generational garbage collector that meets the needs of memory-constrained devices with soft real-time requirements. MC2 has low space over-head and tight space bounds, prevents fragmentation, provides good throughput, and yields short pause times. These qualities make MC2 attractive for other environments, including desktops and servers.
Narendran Sachindran, J. Eliot B. Moss, Emery D. Berger
OOPSLA2
2004 Inducing heuristics to decide whether to schedule
abstract
Instruction scheduling is a compiler optimization that can improve program speed, sometimes by 10% or more, but it can also be expensive. Furthermore, time spent optimizing is more important in a Java just-in-time (JIT) compiler than in a traditional one because a JIT compiles code at run time, adding to the running time of the program. We found that, on any given block of code, instruction scheduling often does not produce significant benefit and sometimes degrades speed. Thus, we hoped that we could focus scheduling effort on those blocks that benefit from it.Using supervised learning we induced heuristics to predict which blocks benefit from scheduling. The induced function chooses, for each block, between list scheduling and not scheduling the block at all. Using the induced function we obtained over 90% of the improvement of scheduling every block but with less than 25% of the scheduling effort. When used in combination with profile-based adaptive optimization, the induced function remains effective but gives a smaller reduction in scheduling effort. Deciding when to optimize, and which optimization(s) to apply, is an important open problem area in compiler research. We show that supervised learning solves one of these problems well.
John Cavazos, J. Eliot B. Moss
PLDI2
2003 Mark-copy: fast copying GC with less space overhead
abstract
Copying garbage collectors have a number of advantages over non-copying collectors, including cheap allocation and avoiding fragmentation. However, in order to provide completeness (the guarantee to reclaim each garbage object eventually), standard copying collectors require space equal to twice the size of the maximum live data for a program. We present a mark-copy collection algorithm (MC) that extends generational copying collection and significantly reduces the heap space required to run a program. MC reduces space overhead by 75--85% compared with standard copying garbage collectors, increasing the range of applications that can use copying garbage collection. We show that when MC is given the same amount of space as a generational copying collector, it improves total execution time of Java benchmarks significantly in tight heaps, and by 5--10% in moderate size heaps. We also compare the performance of MC with a (non-generational) mark-sweep collector and a hybrid copying/mark-sweep generational collector. We find that MC can run in heaps comparable in size to the minimum heap space required by mark-sweep. We also find that for most benchmarks MC is significantly faster than mark-sweep in small and moderate size heaps. When compared with the hybrid collector, MC improves total execution time by about 5% for some benchmarks, partly by increasing the speed of execution of the application code.
Narendran Sachindran, J. Eliot B. Moss
OOPSLA2
2003 Sapphire: copying garbage collection without stopping the world
abstract
Abstract The growing use in concurrent systems of languages that require garbage collection (GC), such as Java, is raising practical interest in concurrent GC. Sapphire is a new algorithm for concurrent copying GC for Java. It stresses minimizing the amount of time any given application thread may need to block to support the collector. In particular, Sapphire is intended to work well in the presence of a large number of application threads, on small‐ to medium‐scale shared memory multiprocessors. Sapphire extends previous concurrent copying algorithms, and is most closely related to replicating copying collection, a GC technique in which application threads observe and update primarily the old copies of objects. The key innovations of Sapphire are: (1) the ability to ‘flip’ one thread at a time (changing the thread's view from the old copies of objects to the new copies), as opposed to needing to stop all threads and flip them at the same time; (2) exploiting Java semantics and assuming any data races occur on volatile fields, to avoid a barrier on reads of non‐volatile fields; and (3) working in concert with virtually any underlying (non‐concurrent) copying collection algorithm. Copyright © 2003 John Wiley & Sons, Ltd.
Richard L. Hudson, J. Eliot B. Moss
Concurr. Comput. Pract. Exp.2
2002 Beltway: Getting Around Garbage Collection Gridlock
abstract
We present the design and implementation of a new garbage collection framework that significantly generalizes existing copying collectors. The Beltway framework exploits and separates object age and incrementality. It groups objects in one or more increments on queues called belts, collects belts independently, and collects increments on a belt in first-in-first-out order. We show that Beltway configurations, selected by command line options, act and perform the same as semi-space, generational, and older-first collectors, and encompass all previous copying collectors of which we are aware. The increasing reliance on garbage collected languages such as Java requires that the collector perform well. We show that the generality of Beltway enables us to design and implement new collectors that are robust to variations in heap size and improve total execution time over the best generational copying collectors of which we are aware by up to 40%, and on average by 5 to 10%, for small to moderate heap sizes. New garbage collection algorithms are rare, and yet we define not just one, but a new family of collectors that subsumes previous work. This generality enables us to explore a larger design space and build better collectors.
Steve Blackburn, Richard E. Jones, Kathryn S. McKinley, J. Eliot B. Moss
PLDI4
2002 Error-free garbage collection traces: how to cheat and not get caught
abstract
Programmers are writing a large and rapidly growing number of programs in object-oriented languages such as Java that require garbage collection (GC). To explore the design and evaluation of GC algorithms quickly, researchers are using simulation based on traces of object allocation and lifetime behavior. The brute force method generates perfect traces using a whole-heap GC at every potential GC point in the program. Because this process is prohibitively expensive, researchers often use granulated traces by collecting only periodically, e.g., every 32K bytes of allocation.We extend the state of the art for simulating GC algorithms in two ways. First, we present a systematic methodology and results on the effects of trace granularity for a variety of copying GC algorithms. We show that trace granularity often distorts GC performance results compared with perfect traces, and that some GC algorithms are more sensitive to this effect than others. Second, we introduce and measure the performance of a new precise algorithm for generating GC traces which is over 800 times faster than the brute force method. Our algorithm, called Merlin, frequently timestamps objects and later uses the timestamps of dead objects to reconstruct precisely when they died. It performs only periodic garbage collections and achieves high accuracy at low cost, eliminating any reason to use granulated traces.
Matthew Hertz, Steve Blackburn, J. Eliot B. Moss, Kathryn S. McKinley, Darko Stefanovic
SIGMETRICS3
2002 Building a Basic Block Instruction Scheduler with Reinforcement Learning and Rollouts
Amy McGovern, J. Eliot B. Moss, Andrew G. Barto
Mach. Learn.2
2001 Pretenuring for Java
abstract
Pretenuring can reduce copying costs in garbage collectors by allocating long-lived objects into regions that the garbage collector with rarely, if ever, collect. We extend previous work on pretenuring as follows. (1) We produce pretenuring advice that is neutral with respect to the garbage collector algorithm and configuration. We thus can and do combine advice from different applications. We find that predictions using object lifetimes at each allocation site in Java prgroams are accurate, which simplifies the pretenuring implementation. (2) We gather and apply advice to applications and the Jalapeño JVM, a compiler and run-time system for Java written in Java. Our results demonstrate that building combined advice into Jalapeño from different application executions improves performance regardless of the application Jalapeño is compiling and executing. This build-time advice thus gives user applications some benefits of pretenuring without any application profiling. No previous work pretenures in the run-time system. (3) We find that application-only advice also improves performance, but that the combination of build-time and application-specific advice is almost always noticeably better. (4) Our same advice improves the performance of generational and Older First colleciton, illustrating that it is collector neutral.
Steve Blackburn, Sharad Singhai, Matthew Hertz, Kathryn S. McKinley, J. Eliot B. Moss
OOPSLA5
2001 Using types to analyze and optimize object-oriented programs
abstract
Object-oriented programming languages provide many software engineering benefits, but these often come at a performance cost. Object-oriented programs make extensive use of method invocations and pointer dereferences, both of which are potentially costly on modern machines. We show how to use types to produce effective, yet simple, techniques that reduce the costs of these features in Modula-3, a statically typed, object-oriented language. Our compiler performs type-based alias analysis to disambiguate memory references. It uses the results of the type-based alias analysis to eliminate redundant memory references and to replace monomorphic method invocation sites with direct calls. Using limit, static, and running time evaluation, we demonstrate that these techniques are effective, and sometimes perfect for a set of Modula-3 benchmarks.
Amer Diwan, Kathryn S. McKinley, J. Eliot B. Moss
ACM Trans. Program. Lang. Syst.3
2000 Cycles to Recycle: Garbage Collection on the IA-64
abstract
The IA-64, Intel's 64-bit instruction set architecture, exhibits a number of interesting architectural features. Here we consider those features as they relate to supporting garbage collection (GC). We aim to assist GC and compiler implementors by describing how one may exploit features of the IA-64. Along the way, we record some previously unpublished object scanning techniques, and offer novel ones for object allocation (suggesting some simple operating system support that would simplify it) and the Java “jsr problem”. We also discuss ordering of memory accesses and how the IA-64 can achieve publication safety efficiently. While our focus is not on any particular GC implementation or programming language, we draw on our experience designing and implementing GC for the Intel Java Virtual Machine for the IA-64.
Richard L. Hudson, J. Eliot B. Moss, Sreenivas Subramoney, Weldon Washburn
ISMM2
2000 On Models for Object Lifetimes
abstract
Analytical models of memory object lifetimes are appealing because having them would enable mathematical analysis or fast simulation of the memory management behavior of programs. In this paper, we investigate models for object lifetimes drawn from programs in object-oriented languages such as Java and Smalltalk. We present certain postulated analytical models and compare them with observed lifetimes for 58 programs. We find that observed lifetime distributions do not match previously proposed object lifetime models, but do agree in salient shape characteristics with the gamma distribution family used in statistical survival analysis for general populations.
Darko Stefanovic, Kathryn S. McKinley, J. Eliot B. Moss
ISMM3
1999 Age-Based Garbage Collection
abstract
Modern generational garbage collectors look for garbage among the young objects, because they have high mortality; however, these objects include the very youngest objects, which clearly are still live. We introduce new garbage collection algorithms, called age-based, some of which postpone consideration of the youngest objects. Collecting less than the whole heap requires write barrier mechanisms to track pointers into the collected region. We describe here a new, efficient write barrier implementation that works for age-based and traditional generational collectors. To compare several collectors, their configurations, and program behavior, we use an accurate simulator that models all heap objects and the pointers among them, but does not model cache or other memory effects. For object-oriented languages, our results demonstrate that an older-first collector, which collects older objects before the youngest ones, copies on average much less data than generational collectors. Our results also show that an older-first collector does track more pointers, but the combined cost of copying and pointer tracking still favors an older-first over a generational collector in many cases. More importantly, we reopen for consideration the question where in the heap and with which policies copying collectors will achieve their best performance.
Darko Stefanovic, Kathryn S. McKinley, J. Eliot B. Moss
OOPSLA3
1998 Scheduling Straight-Line Code Using Reinforcement Learning and Rollouts
Amy McGovern, J. Eliot B. Moss
NIPS2
1998 Garbage Collection and Local Variable Type-Precision and Liveness in Java Virtual Machines
abstract
Full precision in garbage collection implies retaining only those heap allocated objects that will actually be used in the future. Since full precision is not computable in general, garbage collectors use safe (i.e., conservative) approximations such as reachability from a set of root references. Ambiguous roots collectors (commonly called "conservative") can be overly conservative because they overestimate the root set, and thereby retain unexpectedly large amounts of garbage. We consider two more precise collection schemes for Java virtual machines (JVMs). One uses a type analysis to obtain a type-precise root set (only those variables that contain references); the other adds a live variable analysis to reduce the root set to only the live reference variables. Even with the Java programming language's strong typing, it turns out that the JVM specification has a feature that makes type-precise root sets difficult to compute. We explain the problem and ways in which it can be solved.Our experimental results include measurements of the costs of the type and liveness analyses at load time, of the incremental benefits at run time of the liveness analysis over the type analysis alone, and of various map sizes and counts. We find that the liveness analysis often produces little or no improvement in heap size, sometimes modest improvements, and occasionally the improvement is dramatic. While further study is in order, we conclude that the main benefit of the liveness analysis is preventing bad surprises.
Ole Agesen, David Detlefs, J. Eliot B. Moss
PLDI3
1998 Type-Based Alias Analysis
abstract
This paper evaluates three alias analyses based on programming language types. The first analysis uses type compatibility to determine aliases. The second extends the first by using additional high-level information such as field names. The third extends the second with a flow-insensitive analysis. Although other researchers suggests using types to disambiguate memory references, none evaluates its effectiveness. We perform both static and dynamic evaluations of type-based alias analyses for Modula-3, a statically-typed type-safe language. The static analysis reveals that type compatibility alone yields a very imprecise alias analysis, but the other two analyses significantly improve alias precision. We use redundant load elimination (RLE) to demonstrate the effectiveness of the three alias algorithms in terms of the opportunities for optimization, the impact on simulated execution times, and to compute an upper bound on what a perfect alias analysis would yield. We show modest dynamic improvements for (RLE), and more surprisingly, that on average our alias analysis is within 2.5% of a perfect alias analysis with respect to RLE on 8 Modula-3 programs. These results illustrate that to explore thoroughly the effectiveness of alias analyses, researchers need static, dynamic, and upper-bound analysis. In addition, we show that for type-safe languages like Modula-3 and Java, a fast and simple alias analysis may be sufficient for many applications.
Amer Diwan, Kathryn S. McKinley, J. Eliot B. Moss
PLDI3
1997 Learning to Schedule Straight-Line Code
J. Eliot B. Moss, Paul E. Utgoff, John Cavazos, Doina Precup, Darko Stefanovic, Carla E. Brodley, David Scheeff
NIPS1
1997 Garbage Collecting the World: One Car at a Time
abstract
A new garbage collection algorithm for distributed object systems, called DMOS (Distributed. Mature Object Space), is presented. It is derived from two previous algorithms, MOS (Mature Object Space), sometimes called the train algorithm, and PMOS (Persistent Mature Object Space). The contribution of DMOS is that it provides the following unique combination of properties for a distributed collector: safety, completeness, non-disruptiveness, incrementality, and scalability. Furthermore, the DMOS collector is non-blocking and does not use global tracing.
Richard L. Hudson, Ronald Morrison, J. Eliot B. Moss, David S. Munro
OOPSLA3
1996 Simple and Effective Analysis of Statically Typed Object-Oriented Programs
abstract
To use modern hardware effectively, compilers need extensive control-flow information. Unfortunately, the frequent method invocations in object-oriented languages obscure control flow. In this paper, we describe and evaluate a range of analysis techniques to convert method invocations into direct calls for statically-typed object-oriented languages and thus improve control-flow information in object-oriented languages. We present simple algorithms for type hierarchy analysis, aggregate analysis, and interprocedural and intraprocedural type propagation. These algorithms are also fast, O(|procedures| * ∑pprocedure np * vp) worst case time (linear in practice) for our slowest analysis, where np is the size of procedure p and vp is the number of variables in procedure p, and are thus practical for use in a compiler. When they fail, we introduce cause analysis to reveal the source of imprecision and suggest where more powerful algorithms may be warranted. We show that our simple analyses perform almost as well as an oracle that resolves all method invocations that invoke only a single procedure.
Amer Diwan, J. Eliot B. Moss, Kathryn S. McKinley
OOPSLA2
1995 Memory System Performance of Programs with Intensive Heap Allocation
abstract
Heap allocation with copying garbage collection is a general storage management technique for programming languages. It is believed to have poor memory system performance. To investigate this, we conducted an in-depth study of the memory system performance of heap allocation for memory systems found on many machines. We studied the performance of mostly functional Standard ML programs which made heavy use of heap allocation. We found that most machines support heap allocation poorly. However, with the appropriate memory system organization, heap allocation can have good performance. The memory system property crucial for achieving good performance was the ability to allocate and initialize a new object into the cache without a penalty. This can be achieved by having subblock by placement with a subblock size of one word with a write-allocate policy, along with fast page-mode writes or a write buffer. For caches with subblock placement, the data cache overhead was under 9% for a 64K or larger data cache; without subblock placement the overhead was often higher than 50%.
Amer Diwan, David Tarditi, J. Eliot B. Moss
ACM Trans. Comput. Syst.3
1994 Supporting Full-Text Information Retrieval with a Persistent Object Store
Eric W. Brown 0001, Jamie Callan, W. Bruce Croft, J. Eliot B. Moss
EDBT4
1994 Memory Subsystem Performance of Programs Using Copying Garbage Collection
abstract
Heap allocation with copying garbage collection is believed to have poor memory subsystem performance. We conducted a study of the memory subsystem performance of heap allocation for memory subsystems found on many machines. We found that many machines support heap allocation poorly. However, with the appropriate memory subsystem organization, heap allocation can have good memory subsystem performance.
Amer Diwan, David Tarditi, J. Eliot B. Moss
POPL3
1993 Transactional Memory: Architectural Support for Lock-Free Data Structures
abstract
A shared data structure is lock-free if its operations do not require mutual exclusion. If one process is interrupted in the middle of an operation, other processes will not be prevented from operating on that object. In highly concurrent systems, lock-free data structures avoid common problems associated with conventional locking techniques, including priority inversion, convoying, and difficulty of avoiding deadlock. This paper introduces transactional memory, a new multiprocessor architecture intended to make lock-free synchronization as efficient (and easy to use) as conventional techniques based on mutual exclusion. Transactional memory allows programmers to define customized read-modify-write operations that apply to multiple, independently-chosen words of memory. It is implemented by straightforward extensions to any multiprocessor cache-coherence protocol. Simulation results show that transactional memory matches or outperforms the best known locking techniques for simple benchmarks, even in the absence of priority inversion, convoying, and deadlock.
Maurice Herlihy, J. Eliot B. Moss
ISCA2
1993 Object Fault Handling for Persistent Programming Languages: A Performance Evaluation
abstract
A key mechanism of a persistent programming language is its ability to detect and handle references to non-resident objects.Ideally, this mechanism should be hidden from the programmer, allowing the transparent manipulation of all data regardless of its potential lifetime.We term such a mechanism object faulting, in a deliberate analogy with page faulting in virtual memory systems.This paper presents a number of mechanisms for detecting and handling references to persistent objects, and evaluates their relative performance within an implementation of Persistent Smalltalk.
Antony L. Hosking, J. Eliot B. Moss
OOPSLA2
1993 Protection Traps and Alternatives for Memory Management of an Object-Oriented Language
abstract
Many operating systems allow user programs to specify the protection level (inaccessible, read-only, read-write) of pages in their virtual memory address space, and to handle any protection violations that may occur. Such page-protection techniques have been exploited by several user-level algorithms for applications including generational garbage collection and persistent stores. Unfortunately, modern hardware has made efficient handling of page protection faults more difficult. Moreover, page-sized granularity may not match the natural granularity of a given application. In light of these problems, we reevaluate the usefulness of page-protection primitives in such applications, by comparing the performance of implementations that make use of the primitives with others that do not. Our results show that for certain applications software solutions outperform solutions that rely on page-protection or other related virtual memory primitives.
Antony L. Hosking, J. Eliot B. Moss
SOSP2
1993 Update Logging for Persistent Programming Languages: A Comparative Performance Evaluation
Antony L. Hosking, Eric W. Brown 0001, J. Eliot B. Moss
VLDB3
1992 A Comparative Performance Evaluation of Write Barrier Implementations
abstract
article Free Access Share on A comparative performance evaluation of write barrier implementation Authors: Antony L. Hosking View Profile , J. Eliot B. Moss View Profile , Darko Stefanovic View Profile Authors Info & Claims ACM SIGPLAN NoticesVolume 27Issue 10Oct. 1992 pp 92–109https://doi.org/10.1145/141937.141946Online:31 October 1992Publication History 66citation607DownloadsMetricsTotal Citations66Total Downloads607Last 12 Months12Last 6 weeks4 Get Citation AlertsNew Citation Alert added!This alert has been successfully added and will be sent to:You will be notified whenever a record that you have chosen has been cited.To manage your alert preferences, click on the button below.Manage my AlertsNew Citation Alert!Please log in to your account Save to BinderSave to BinderCreate a New BinderNameCancelCreateExport CitationPublisher SiteeReaderPDF
Antony L. Hosking, J. Eliot B. Moss, Darko Stefanovic
OOPSLA2
1992 Compiler Support for Garbage Collection in a Statically Typed Language
abstract
We consider the problem of supporting compacting garbage collection in the presence of modern compiler optimizations. Since our collector may move any heap object, it must accurately locate, follow, and update all pointers and values derived from pointers. To assist the collector, we extend the compiler to emit tables describing live pointers, and values derived from pointers, at each program location where collection may occur. Significant results include identification of a number of problems posed by optimizations, solutions to those problems, a working compiler, and experimental data concerning table sizes, table compression, and time overhead of decoding tables during collection. While gc support can affect the code produced, our sample programs show no significant changes, the table sizes are a modest fraction of the size of the optimized code, and stack tracing is a small fraction of total gc time. Since the compiler enhancements are also modest, we conclude that the approach is practical.
Amer Diwan, J. Eliot B. Moss, Richard L. Hudson
PLDI2
1992 Lock-Free Garbage Collection for Multiprocessors
abstract
Garbage collection algorithms for shared-memory multiprocessors typically rely on some form of global synchronization to preserve consistency. Such global synchronization may lead to problems on asynchronous architectures: if one process is halted or delayed, other, nonfaulty processes will be unable to progress. By contrast, a storage management algorithm is lock-free if (in the absence of resource exhaustion) a process that is allocating or collecting memory can be delayed at any point without forcing other processes to block. The authors present the first algorithm for lock-free garbage collection in a realistic model. The algorithm assumes that processes synchronize by applying read, write, and compare&swap operations to shared memory. This algorithm uses no locks, busy-waiting, or barrier synchronization, it does not assume that processes can observe or modify one another's local variables or registers, and it does not use inter-process interrupts.>
Maurice Herlihy, J. Eliot B. Moss
IEEE Trans. Parallel Distributed Syst.2
1992 Working with Persistent Objects: To Swizzle or Not to Swizzle
abstract
Pointer swizzling is the conversion of database objects between an external form (object identifiers) and an internal form (direct memory pointers). Swizzling is used in some object-oriented databases, persistent object stores, and persistent and database programming language implementations to speed manipulation of memory resident data. The author describes a simplifying model of application behavior, revealing those aspects where swizzling is most relevant in both benefits and costs. The model has a number of parameters, which the authors have measured for a particular instance of the Mneme persistent object store, varying the swizzling technique used. The results confirm most of the intuitive, qualitative tradeoffs, with the quantitative data showing that some performance differences between schemes are smaller than might be expected. However, there are some interesting effects that run counter to naive intuition, most of which are explained using deeper analysis of the algorithms and data structures.>
J. Eliot B. Moss
IEEE Trans. Software Eng.1
1991 Lock-Free garbage Collection for Multiprocessors
abstract
Garbage collection algorithms for shared-memory multiprocessors typically rely on some form of global synchronization to preserve consistency.Such global synchronization may lead to problems on asynchronous architectures: if one process is halted or delayed, other, non-faulty processes will be unable to progress.By contrast, a storage management algorithm is loclc-j%ee if (in the absence of resource exhaustion) a process that is allocating or collecting memory can be delayed at any point without forcing other processes to block.This paper presents the first algorithm for lock-free garbage collection in a realistic model.The algorithm assumes that processes synchronize by applying read, write, and compare&swap operations to shared memory.This algorithm uses no locks, busy-waiting, or barrier synchronization, it does not assume that processes can observe or modify one another's local variables or registers, and it does not use inter-process interrupts.
Maurice Herlihy, J. Eliot B. Moss
SPAA2
1990 Design of the Mneme Persistent Object Store
abstract
The Mneme project is an investigation of techniques for integrating programming language and database features to provide better support for cooperative, information-intensive tasks such as computer-aided software engineering. The project strategy is to implement efficient, distributed, persistent programming languages. We report here on the Mneme persistent object store, a fundamental component of the project, discussing its design and initial prototype. Mneme storesobjectsin a simple and general format, preserving object identity and object interrelationships. Specific goals for the store include portability, extensibility (especially with respect to object management policies), and performance. The model of memory that the store aims at is a single, cooperatively-shared heap, distributed across a collection of networked computers. The initial prototype is intended mainly to explore performance issues and to support object-oriented persistent programming languages. We include performance measurements from the prototype as well as more qualitative results.
J. Eliot B. Moss
ACM Trans. Inf. Syst.1
1989 Panel: Inheritance: Can We Have Our Cake and Eat it, Too?
J. Eliot B. Moss, Ralf Johnson, Alan Snyder, David W. Stemple, David M. Ungar
OOPSLA1
1987 Concurrency Features for the Trellis/Owl Language
J. Eliot B. Moss, Walter H. Kohler
ECOOP1
1987 Finer Grained Concurrency for the Database Cache
abstract
The database cache transaction recovery technique as proposed in [Elhard and Bayer 84] offers significant performance advantages for reliable database systems. However, the smallest granularity of locks it provides is the page. Here we present two schemes supporting smaller granularity. The first scheme allows maximal concurrency consistent with physical two-phase locking, with the same per-transaction I/O cost as original database cache scheme. The second scheme offers the same concurrency as the first, but features reduced I/O on commit, at the cost of some increase recovery time.
J. Eliot B. Moss, Bruce Leban, Panos K. Chrysanthis
ICDE1
1987 Managing stack frames in Smalltalk
J. Eliot B. Moss
PLDI1
1987 Log-Based Recovery for Nested Transactions
J. Eliot B. Moss
VLDB1
1986 Abstraction in Recovery Management
abstract
Abstract. There are many examples of actions on abstract data types which can be correctly implemented with nonserralizable and nonrecoverable schedules of reads and writes We examme a model of multiple lay-ers of abstraction that explains this phenomenon and suggests an approach to burldmg layered systems with transaction oriented synchromzatron and roll back Our model may make rt easier to provide the high data m-tegrrty of reliable database transaction processmg m a broader class of mformatron systems We concentrate on the recovery aspects here, a technical report [Moss et al 851 has a more complete drscussron of concurrency control 1
J. Eliot B. Moss, Nancy D. Griffeth, Marc H. Graham
SIGMOD Conference1