[资料] 名词链接帖 [占位ing]

RednaxelaFX 2010-09-11
A


Abstract Interpretation Wikipedia
see also: Symbolic Execution


Abstract Syntax Tree (AST) Wikipedia


Accumulator-based Architecture Wikipedia
see also: Accumulator Machine


Accumulator Machine
see also: Accumulator-based Architecture


Adaptive Compilation

presentation:

Dynamic Compilation and Adaptive Optimization in Virtual Machines (2006)
Matthew Arnold,Stephen Fink, David Grove, Michael Hind


Ahead-of-time Compilation (AOT Compilation)


Alias Analysis Wikipedia


Automatic Memory Management
see also: Memory Management, Garbage Collection


Automaton Wikipedia


B


Back-edge


Basic Block (BB) Wikipedia


Biased-locking

paper:

Eliminating Synchronization-Related Atomic Operation with Biased Locking and Bulk Rebiasing (2006)
Ken Russell, Dave Detlefs


Bimorphic


Bootstrapping Wikipedia


Bottom Type


Bottom-up Parsing


Bottom-up Rewrite System (BURS) Wikipedia


Branch Target Buffer (BTB) Wikipedia


Bytecode

documentation:

Specification of the GNU Smalltalk virtual machine

The Strongtalk VM bytecode format


C


Card Table
see also: Remember Set, Garbage Collection

paper:

Remembered sets can also play cards (1993)
Antony L. Hosking, Richard L. Hudson


Central Processing Unit (CPU) Wikipedia


Class Hierarchy Analysis (CHA)

article:

Class Hierarchy Graphs, Function Devirtualization, & RTTI (2005-04-01)
Dibyendu Das

paper:

Optimization of Object-Oriented Programs using Static Class Hierarchy Analysis (1995)
Jeffrey Dean, David Grove, Craig Chambers


Code Motion


Common Intermediate Language (CIL) Wikipedia


Common Language Infrastructure (CLI) Wikipedia

documentation:

ECMA-335 Common Language Infrastructure (CLI)

ISO/IEC 23271:2006


Common Language Runtime (CLR)


Compare-and-swap (CAS)
see also: Load-Linked / Store-Conditional

blog:

Unsafe & CompareAndSwap (2010-07-24)
Cliff Click, Jr.


Compilation Wikipedia


Component-Dependency Graph (CDG)


Constant Folding Wikipedia
see also: Constant Propagation


Constant Propagation Wikipedia
see also: Constant Folding


Constrained Execution Region (CER)

documentation:

Constrained Execution Regions


Context-free Grammar (CFG) Wikipedia


Continuation Wikipedia


Continuation-passing Style (CPS) Wikipedia


Contravariance


Control Flow Wikipedia


Control-flow Graph (CFG) Wikipedia


Control-flow Normalization


Copy-on-write (CoW) Wikipedia


Copy Propagation Wikipedia


Coroutine Wikipedia

documentation:

Da Vinci Machine Project Wiki: Coroutines (2010)
Lukas Stadler


Covariance


D


Deferred Reference Counting (DRC)
see also: Reference Counting


Directed Acyclic Graph (DAG) Wikipedia


Dominator Wikipedia


Dominator Tree


Duck Typing Wikipedia


Dynamic Language Runtime (DLR) Wikipedia


Dynamic Recompilation (dynarec) Wikipedia

blog post:

Introduction to Dynamic Recompilation


Dynamic Typing


E


Eliminating Array-Bounds Checks on Demand (ABCD)

paper:

ABCD: Eliminating Array-Bounds Checks on Demand (2000)
Rastislav Bodik, Rajiv Gupta, Vivek Sarkar


Ephemeral


Escape Analysis (EA) Wikipedia

presentation:

Fast Bytecodes for Funny Languages (2008)
Cliff Click, Jr.

blog post:

Escape Analysis in PyPy's JIT (2010-09-13)

The JSR292 endgame (2009)
Fredrik Öhrström

paper:

在开放世界中实现逃逸分析 (2008)
史晓华, 吴甘沙, 金茂忠, LUEH Guei-Yuan, 刘超, 王雷

Evaluating the Impact of Thread Escape Analysis on a Memory Consistency Model-aware Compiler (2005)
Chi-Leung Wong, Zehra Sura, Xing Fang, Kyungwoo Lee, Samuel P. Midki, Jaejin Lee, David Padua

Escape Analysis for Java (1999)
Jong-Deok Choi, Manish Gupta, Mauricio Serrano, Vugranam C. Sreedhar, Sam Midkiff


Evaluation Stack
see also: Expression Stack, Operand Stack


Exeception


Execution Engine (EE)


Execution Environment (EE)


Expression Stack
see also: Evaluation Stack, Operand Stack


F


Feedback-directed Optimization (FDO)


Finite Automaton (FA)
see also: Finite-state Machine


Finite-state Machine (FSM) Wikipedia
see also: Finite Automaton


Foreign Function Interface (FFI) Wikipedia


Forth Wikipedia


G


Garbage Collection (GC) Wikipedia

book:

ガベージコレクションのアルゴリズムと実装 (2010)
中村 成洋, 相川 光, 竹内 郁雄
ISBN-10: 4798025623

Garbage Collection: Algorithms for Automatic Dynamic Memory Management (1996)
Richard Jones, Rafael D. Lins
ISBN-10: 0471941484


Generics Wikipedia


Global Value Numbering (GVN) Wikipedia


Grammar


Graph-coloring Register Allocation


H


Handle Wikipedia


Heap Wikipedia


Hidden Class

presentation:

First-Class Hidden Types (2006)
Joe Hallett, Eric Allen, Victor Luchangco, Sukyoung Ryu, Sam Tobin-Hochstadt

paper:

Organizing Programs Without Classes (1991)
David Ungar, Craig Chambers, Bay-Wei Chang, and Urs Hölzle


High-frequency Heap

book:

Shared Source CLI Essentials, page 222


Hotpath VM
see also: Trace-based Compilation


I


Inheritance Wikipedia


Inner Interpreter
see also: Forth


Instruction


Instruction-level Parallelism (ILP) Wikipedia


Instruction Set Wikipedia
see also: Instruction Set Architecture


Instruction Set Architecture (ISA)
see also: Instruction Set


Instrumentation Wikipedia


Interface Method Table (IMT, itable, itbl)
see also: Interface Virtual Table

paper:

Efficient Dispatch of Java Interface Methods (2001)
Bowen Alpern, Anthony Cocchi, David Grove, Derek Lieber

Efficient Implementation of Java Interfaces: Invokeinterface Considered Harmless (2001)
Bowen Alpern, Anthony Cocchi, Stephen Fink, David Grove, Derek Lieber


Interface Virtual Table (IVT, itable, itbl)
see also: Interface Method Table

paper:

SableVM: A Research Framework for the Efficient Execution of Java Bytecode (2001)
Etienne M. Gagnon, Laurie J. Hendren


Intermediate Language (IL)
see also: Intermediate Representation


Intermediate Representation (IR) Wikipedia
see also: Intermediate Language

paper:

Improving Compiler-Runtime Separation with XIR (2010)
Ben L. Titzer, Thomas Würthinger, Doug Simon, Marcelo Cintra


Interpretation Wikipedia


Interprocedural Analysis (IPA) Wikipedia


Intrinsics Wikipedia


J


Jalapeño
see also: Jikes RVM


Java Bytecode
see also: Bytecode

documentation:

The JavaTM Virtual Machine Specification, Second Edition, Chapter 6 The Java Virtual Machine Instruction Set
Tim Lindholm, Frank Yellin

paper:

Java intermediate bytecodes (1995)
James Gosling


Jikes RVM Wikipedia
see also: Jalapeño


Just-in-time Compilation (JIT Compilation) Wikipedia

paper:

Design and Evaluation of Dynamic Optimizations for a Java Just-In-Time Compiler (2007), Toshio Suganuma


K


L


Large-object Heap (LOH)

book:

Shared Source CLI Essentials, page 232-234


Lexer
see also: Scanner, Tokenizer


Linear-scan Register Allocation (LSRA)

paper:

Linear Scan Register Allocation for the Java HotSpot™ Client Compiler (2004)
Christian Wimmer


Linking


Load-Linked / Store-Conditional (LL/SC) Wikipedia


Load-store Architecture


Local Value Numbering (LVN)


Loop


Loop-header


Loop-invariant Code Motion (LICM) Wikipedia


Loop Nest Optimization (LNO) Wikipedia


Low-frequency Heap

book:

Shared Source CLI Essentials, page 222


M


Managed Runtime Environment (MRE, MRTE)

workshop:

3rd Workshop on Managed Runtime Environments, MRE'05 (2005)


Megamorphic


Memory Barrier (membar) Wikipedia
see also: Memory Fence


Memory Fence
see also: Memory Barrier


Memory Management Wikipedia

website:

The Memory Management Reference


Memory Management Unit (MMU) Wikipedia


Memory Model


Metacircular Evaluator (metacircular interpreter, metacircular virtual machine) Wikipedia
用高级语言实现时,有两种思路:
1、用高级语言的受限子集来编写,将其翻译为较低级语言后再编译生成最终的目标代码
(例:Squeak (Smalltalk -> Slang), Squawk (Java -> Java), PyPy (Python -> RPython))
2、直接用高级语言自身来编写整个运行时环境,依赖compiler intrinsics来提供语言扩展以实现底层操作
(例:Jikes RVM (Java), MRP (Java), Klein (Smalltalk), Maxine (Java))


Metacircular Research Platform (MRP)
see also: Jikes RVM


Metaobject Protocol (MOP) Wikipedia

book:

The Art of the Metaobject Protocol (1991)
Gregor Kiczales, Jim des Rivieres, Daniel G. Bobrow
ISBN-10: 0262610744


Method Handle


Method Inlining

paper:

An Empirical Study of Method Inlining for a Java Just-In-Time Compiler (2002)
Toshio Suganuma, Toshiaki Yasue, Toshio Nakatani


Monomorphic Inline Cache (MIC)


Multiple Inheritance Wikipedia


N


Nominal Typing Wikipedia


Non-local Control Flow


Non-Uniform Memory Architecture (NUMA, Non-Uniform Memory Access) Wikipedia


O


Object Churn

presentation:
Jolt: Removing Object Churn


Object Fusing
see also: Object Layout

paper:

Automatic Feedback-Directed Object Fusing (2010)
Christian Wimmer, Hanspeter Mössenböck


Object Layout

book:

Rubyソースコード完全解説, 第2章 オブジェクト (2002)
青木 峰郎, まつもと ゆきひろ
ISBN-10: 4844317210

paper:

Vertical Object Layout and Compression for Fixed Heaps (2007)
Ben L. Titzer, Jens Palsberg

Custom Object Layout for Garbage-Collected Languages (2006)
Gene Novark, Trevor Strohman, Emery D. Berger


Object-oriented Programming (OOP)


On-stack Replacement (OSR)

technical article:

The Java HotSpot Performance Engine: On-Stack Replacement Example (2000)
Sun Microsystems

paper:

Efficient and General On-Stack Replacement for Aggressive Program Specialization (2006)
Sunil Soman, Chandra Krintz


Opcode


Operand Stack
see also: Expression Stack, Evaluation Stack


Operating System


Operator


Operator-precedence Parsing Wikipedia


Ordinary Object Pointer (Object Oriented Pointer, OOP)
see also: Tagged Pointer

documentation:

Compressed oops in the Hotspot JVM
John Rose

VM Types used to map Smalltalk objects into C++ objects


P


Packrat Parsing


Parser


  · Error Recovery

  paper:
 
  Natural and Flexible Error Recovery for Generated Parsers (2009)
  Maartje de Jonge, Emma Nilsson-Nyman, Lennart C. L. Kats, Eelco Visser


Parse Tree


Parsing Expression Grammar (PEG) Wikipedia

paper:

Parsing Expression Grammars: A Recognition-Based Syntactic Foundation (2004)
Bryan Ford


Phi (Φ)
see also: Single Static Assignment Form


Pinning Wikipedia


Profiling Wikipedia


Pointer


Point-to Analysis (pointer analysis) Wikipedia

presentation:

SSA Form w.r.t. Pointer Analysis Precision
Markus Schordan

Pointer Analysis in the Presence of Dynamic Class Loading (2004)
Martin Hirzel, Amer Diwan, Michael Hind


Polymorphic Inline Cache (PIC) Wikipedia

paper:

Optimizing Dynamically-Typed Object-Oriented Programming Languages with Polymorphic Inline Caches (1991)
Urs Hölzle, Craig Chambers, and David Ungar


Polymorphism


Preprocessing Wikipedia


PyPy Wikipedia

blog:

PyPy Status Blog

Q


R


Random Number Generation (RNG) Wikipedia


Read Barrier


Read-eval-print loop (REPL) Wikipedia


Reference Counting Wikipedia


Region-based Compilation (RBC)

paper:

A region-based compilation technique for dynamic compilers (2006)
Toshio Suganuma, Toshiaki Yasue Toshio, Nakatani


A Region-Based Compilation Technique for a Java Just-In-Time Compiler (2003)
Toshio Suganuma, Toshiaki Yasue Toshio, Nakatani


Register Allocation Wikipedia


Register-based Architecture
see also: Stack-based Architecture

paper:

Virtual Machine Showdown: Stack Versus Registers (2005)
Yunhe Shi, David Gregg, Andrew Beatty, M. Anton Ertl


Regular Expression

book:

Mastering Regular Expressions, 3rd Edition (2006)
Jeffrey E.F. Friedl
ISBN-10: 0596528124


Regular Grammar


Reification


Remember Set
see also: Garbage Collection

paper:
Combining Card Marking with Remembered Sets: How to Save Scanning Time (1998)
Alain Azagury, Elliot K. Kolodner, Erez Petrank, Zvi Yehudai


Reverse Polish Notation (RPN) Wikipedia


Roll-forward


Root Set
see also: Garbage Collection


Root Set Enumeration
see also: Root Set, Garbage Collection

paper:

Finding References in Java™ Stacks (1997)
Ole Agesen, David Detlefs


S


Safepoint
see also: Garbage Collection

documentation:

HotSpot Glossary of Terms

blog post:

GC safe-point (or safepoint) and safe-region (2008-01-26)
Xiao-Feng Li

paper:

Optimization of Java Virtual Machine with Safe-Point Garbage Collection (2006)
Sergey V. Rogov, Viacheslav A. Kirillin, Victor V. Sidelnikov

GC Points in a Threaded Environment (1998)
Ole Agesen


Sampling


Snapshot-at-the-beginning (SATB)

glossary: SATB


Scanner
see also: Lexer, Tokenizer


SECD Machine Wikipedia

paper:

The tail-recursive SECD machine (1999)
John D. Ramsdell

The Mechanical Evaluation of Expressions (1964)
Peter J. Landin


Self-modifying Code Wikipedia


Semaphor


Shadow Stack

paper:

Accurate Garbage Collection in an Uncooperative Environment (2002)
Fergus Henderson


Shared Source Common Language Infrastructure (SSCLI, Shared Source CLI) Wikipedia

book:

SSCLI 2.0 Essentials (2009)
Joel Pobar, Ted Neward, David Stutz, Geoff Shilling

Distributed Virtual Machines: Inside the Rotor CLI (2004)
Gary Nutt
ISBN-10: 0321159837

Shared Source CLI Essentials (2001)
David Stutz, Ted Neward, Geoff Shilling
ISBN-10: 059600351X


Single Inheritance


Single Instruction, Multiple Data (SIMD) Wikipedia


Spinlock


Squawk Wikipedia


Stack Banging

blog post:

Stacks with split personalities (2010-08-26)
Doug Simon


Stack-based Architecture
see also: Stack Machine, Register-based Architecture

paper:

Virtual Machine Showdown: Stack Versus Registers (2005)
Yunhe Shi, David Gregg, Andrew Beatty, M. Anton Ertl


Stack Frame


Stack Machine
see also: Stack-based Architecture


Stack Overflow Wikipedia


Stack Walker


State Machine


Static Single Assignment Form (SSA Form) Wikipedia

seminar:

Static Single-Assignment Form Seminar (2009)

presentation:

In and Out of SSA: A Denotational Specification
Sebastian Pop

SSA Form in the Java HotSpot Client Compiler (2010)
Christian Wimmer

paper:

Constructing SSA the Easy Way (2009)
Michael Bebenita

Java Bytecode Verification via Static Single Assignment Form (2008)
Andreas Gal, Michael Franz, Christian W. Probst

Design of the Java HotSpot™ Client Compiler for Java 6 (2006)
Thomas Kotzmann, Christian Wimmer, Hanspeter Mössenböck, Thomas Rodriguez, Kenneth Russell, David Cox


Static Typing


Strength reduction Wikipedia


Strongly Connected Component (SCC) Wikipedia
see also: Graph Theory


Structural Typing Wikipedia


Subtype Checking

paper:

Fast Subtype Checking in the HotSpot JVM (2002)
Cliff Click, John Rose

Dynamic Type Checking in Jalapeño (2001)
Bowen Alpern, Anthony Cocchi, David Grove


Subtyping


Symbolic Execution Wikipedia
see also: Abstract Interpretation


T


Tagged Pointer Wikipedia


Tail Call Wikipedia


Tail Call Optimization (TCO) Wikipedia

paper:

Tail Call Optimization in the Java HotSpot(TM) VM (2009)
Arnold Schwaighofer


Thread


Threaded Code Wikipedia

website:

Threaded Code, M. Anton Ertl

paper:

Threaded Code Variations and Optimizations (Extended Version) (2002)
M. Anton Ertl


Thread-local Allocation Buffer (TLAB)

blog post:

The Real Thing (2006-08-15)
Jon Masamitsu / Ross K.


Thunk Wikipedia


Tokenizer
see also: Lexer, Scanner


Top-down Parsing


Top-of-stack Caching (TOS caching, stack caching, TOSCA)

paper:

Stack Caching for Interpreters (1995)
M. Anton Ertl


Trace-based Compilation

video:

Inside SPUR - A Trace-Based JIT Compiler for CIL (2010)

paper:

Trace Based Compilation in Interpreter-less Execution Environments (2010)
Michael Bebenita, Mason Chang, Karthik Manivannan, Gregor Wagner, Marcelo Cintra, Bernd Mathiske, Andreas Gal, Christian Wimmer, Michael Franz

SPUR - A Trace-Based JIT Compiler for CIL (2010)
Michael Bebenita, Florian Brandner, Manuel Fahndrich, Francesco Logozzo, Wolfram Schulte, Nikolai Tillmann, Herman Venter

Trace-based Just-in-Time Type Specialization for Dynamic Languages (2009)
Andreas Gal, Brendan Eich, Mike Shaver, David Anderson, David Mandelin, Mohammad R. Haghighat, Blake Kaplan, Graydon Hoare, Boris Zbarsky, Jason Orendorff, Jesse Ruderman, Edwin Smith, Rick Reitmaier, Michael Bebenita+, Mason Chang, Michael Franz

Tracing the Meta-Level: PyPy's Tracing JIT Compiler (2009)
Carl Friedrich Bolz, Antonio Cuni

HotpathVM: An Effective JIT Compiler for Resource-constrained Devices (2006)
Andreas Gal, Christian W. Probst, Michael Franz


Trace-tree Wikipedia

paper:

Incremental Dynamic Code Generation with Trace Trees (2006)
Andreas Gal, Michael Franz


Trampoline


Translation Lookaside Buffer (TLB) Wikipedia


Type Checking

paper:

Dynamic Type Checking in Jalapeño (2001)
Bowen Alpern, Anthony Cocchi, David Grove


Type Feedback

paper:

Type Feedback for Bytecode Interpreters (2007)
Michael Haupt, Robert Hirschfeld, Marcus Denker


Type Inference


Type System


U


Unification


V


Virtual Execution Engine (VEE)


Virtual Machine (VM) Wikipedia

book:

Oracle JRockit: The Definitive Guide (2010)
Marcus Hirt, Marcus Lagergren
ISBN-10: 1847198066

Virtual Machines: Versatile Platforms for Systems and Processes (2005)
Jim Smith, Ravi Nair
ISBN-10: 1558609105

Virtual Machines (2005)
Iain D. Craig
ISBN-10: 1852339691

Virtual Machine Design and Implementation C/C++ (2002)
Bill Blunden
ISBN-10: 1556229038


Virtual Memory (VM) Wikipedia


Virtual Method Dispatch (virtual function dispatch)

paper:

The Direct Cost of Virtual Function Calls in C++ (1996)
Karel Driesen, Urs Hölzle


Virtual Method Table (VMT, vtable, vtbl, virtual function table, VFT, vftable, vftbl) Wikipedia


W


Write Barrier

paper:

A Comparative Performance Evaluation of Write Barrier Implementations (1992)
Antony Hosking Eliot, Antony L. Hosking, J. Eliot, B. Moss, Darko Stefanović


X


Y


Z
kennyluck 2014-09-26
线性扫描我推荐同一个作者的新作

Optimized Interval Splitting in a Linear Scan Register Allocator

我看论文的经验不是很多,不过这篇真的感觉写得挺好,也比 04 那篇少很多跟线性扫描无关的东西。
LeafInWind 2014-11-26
请问remembered set与card table是什么关系,可以认为后者是前者的一种实现方式吗?!
RednaxelaFX 2014-11-29
LeafInWind 写道
请问remembered set与card table是什么关系,可以认为后者是前者的一种实现方式吗?!

好久没看到楼上的“?!”了

Remembered Set是一种抽象概念,而card table可以是remembered set的一种实现方式。

Remembered Set是在实现部分垃圾收集(partial GC)时用于记录从非收集部分指向收集部分的指针的集合的抽象数据结构。

分代式GC是一种部分垃圾收集的实现方式。当分两代时,通常把这两代叫做young gen和old gen;通常能单独收集的只是young gen。此时remembered set记录的就是从old gen指向young gen的跨代指针。

Regional collector也是一种部分垃圾收集的实现方式。此时remembered set就要记录跨region的指针。

不过就像平时讨论GC时大家只关心tracing GC而通常不把reference counting算在里面(严格说reference counting也是一种GC),remembered set与card table也有一些平时讨论时隐含的假设(虽然严格说那些假设并不必要)。

例如:

1、记录精度

一般的隐含假设:
Remembered Set:对象粒度(remembered set里存有old generation的对象的指针);
Card Table:card粒度(通常是2的幂字节大小的内存区域,例如HotSpot用512字节),里面可能包含多个对象。

其实无论是remembered set还是card table,记录精度都有很大的选择余地:
* 字粒度:每个记录精确到一个机器字(word)。该字包含有跨代指针。
* 对象粒度:每个记录精确到一个对象。该对象里有字段含有跨代指针。
* card粒度:每个记录精确到一大块内存区域。该区域内有对象含有跨代指针。
* (还有其它可能性,任君想像)

现实中上面3种做法都有应用到实际产品种。全看设计者的取舍。
如果选择card的大小为1 word,那card粒度就是等于字粒度。

2、使用的数据结构

一般的隐含假设:
Remembered Set:使用指针(对象指针或者字指针)的数据来实现,例如
struct RememberedSet {
  Object* data[MAX_REMEMBEREDSET_SIZE];
};


typedef char* address;

struct RememberedSet {
  address* data[MAX_REMEMBEREDSET_SIZE];
};

不然的话不用数组而用例如基于红黑树的集合也成⋯
struct RememberedSet {
  std::set<Object*> data;
};

⋯嗯很少真的这么做的。

Card Table:使用字节数组来实现card的记录,每个card对应该数组里的一个bit或一个byte,例如
struct CardTable {
  byte table[MAX_CARDTABLE_SIZE];
};


实际上card table也是remembered set的一种特殊实现。只是大家平时说的时候总觉得好像remembered set就该有对象指针的数组⋯那是不必要的假设。

3、write-barrier的实现方式

一般的隐含假设:
Remembered Set:write-barrier是有条件的
Card Table:write-barrier是无条件的(也称blind card-marking)

其实remembered set也可以做称无条件的,而card marking也可以做成有条件的。这个都可选择。

==================================

还有一个与remembered set相关的概念,叫做store buffer。由于其实现方式也被称为“sequential store buffer”。
有些资料会把store buffer也看作remembered set的一种实现,但我喜欢把前者看作与后者相关/近似的概念,而不是“实现方式”。

例如最老的V8使用per-page remembered set,而比较新的版本使用store buffer。
(使用remembered set的V8,以最早的V8 0.1为例,每个“Page”有8KB,其中开头有248字节用于remembered set(RSet)。RSet里每个bit对应该Page里的一个word,所以这是word精度的。

而使用store buffer的V8也是word精度的。)

两者的相似之处在于它们都记录跨区域的指针。
而最重要的区别是:remembered set是一个集合(set),所以不包含重复;store buffer则通常允许包含重复。

Store buffer的write-barrier比要去重复的remembered set的writer-barrier要简单和高效,但由于其允许重复,前者在部分收集(例如young GC)时的开销会比后者大。

一个折衷的办法是在mutator的write-barrier还是允许重复,然后周期性增量式或在另一个线程并发的对store buffer去重。这样到实际执行部分收集时重复条目的数量可以大幅减少,提高GC的效率。V8的store buffer就是这样做的。

这种还需要对数据做后续处理的write-barrier也叫做logging write-barrier。

==================================

这组演示稿讲解分代式GC中各种概念的关系讲得不错,可以参考:
https://www.ps.uni-saarland.de/courses/gc-ws01/slides/generational_gc.pdf

Steve Blacburn的barrier论文也有些内容与我上面的描述相应:
Barriers: friend or foe?
引用
Pointer sources can be remembered with a variety of different mechanisms, including remembering cards (regions of memory that may contain pointers into the nursery), objects (objects that may contain pointers into the nursery), and slots (addresses that may contain a pointer into the nursery)
Global site tag (gtag.js) - Google Analytics