Ruby Interpreter with Concurrent GC
C Ruby Emacs Lisp C++ Tcl Other
Switch branches/tags
Nothing to show
Pull request Compare This branch is 3 commits behind nmbook:master.
Permalink
Failed to load latest commit information.
bcc32
benchmark
bin
bootstraptest
cgc-tools
cygwin
defs
doc
enc
ext
include
lib
man
misc
missing
sample
spec
symbian
template
test-benchmarksgame
test
tool
win32
.document
.gdbinit
.gitignore
.indent.pro
.rbconfig.time
.travis.yml
BSDL
COPYING
COPYING.ja
ChangeLog
GNUmakefile
GPL
KNOWNBUGS.rb
LEGAL
Makefile.in
NEWS
README
README.EXT
README.EXT.ja
README.ja
README.md
ToDo
addr2line.c
addr2line.h
array.c
bignum.c
class.c
common.mk
compar.c
compile.c
complex.c
configure
configure.in
constant.h
cont.c
debug.c
debug.h
dir.c
dln.c
dln.h
dln_find.c
dmydln.c
dmyencoding.c
dmyext.c
dmyversion.c
encoding.c
enum.c
enumerator.c
error.c
eval.c
eval_error.c
eval_intern.h
eval_jump.c
exts.mk
file.c
gc.c
gc.h
gem_prelude.rb
golf_prelude.c
golf_prelude.rb
goruby.c
hash.c
ia64.s
id.c
id.h
inits.c
insns.def
insns.inc
internal.h
io.c
iseq.c
iseq.h
known_errors.inc
lex.c
lex.c.blt
load.c
main.c
marshal.c
math.c
method.h
miniprelude.c
newline.c
node.c
node.h
node_name.inc
numeric.c
object.c
opt_sc.inc
optinsn.inc
optunifs.inc
pack.c
parse.y
prelude.c
prelude.rb
proc.c
process.c
random.c
range.c
rational.c
re.c
regcomp.c
regenc.c
regenc.h
regerror.c
regexec.c
regint.h
regparse.c
regparse.h
regsyntax.c
revision.h
ruby.c
ruby_atomic.h
safe.c
signal.c
siphash.c
siphash.h
sparc.c
sprintf.c
st.c
strftime.c
string.c
struct.c
testgc.rb
testresults1
thread.c
thread_pthread.c
thread_pthread.h
thread_win32.c
thread_win32.h
time.c
timev.h
transcode.c
transcode_data.h
uncommon.mk
util.c
variable.c
version.c
version.h
vm.c
vm.inc
vm_core.h
vm_dump.c
vm_eval.c
vm_exec.c
vm_exec.h
vm_insnhelper.c
vm_insnhelper.h
vm_method.c
vm_opts.h
vmtc.inc
vsnprintf.c

README.md

Ruby with Concurrent GC

Ruby Language

See [README] 1 for information on Ruby itself.

This is built on [version 1.9.3-p429] 2.

Concurrent GC Plan

[x] update init_heap()

  • initialize shared memory page [x] update gc_newobj()
  • check freelist: do we need to GC (low)?
  • can we go concurrent? if so: call concurrent_garbage_collect()
  • always return new object [x] add concurrent_garbage_collect()
  • same as garbage_collect except only collects a freelist into shared memory
  1. disallow to go concurrent
  2. prepare shared memory
  3. call fork(). if child: call child_garbage_collect(), else: return [x] add child_garbage_collect()
  • actions as child process
  1. call mark
  2. update memory page
  3. signal changes
  4. exit [x] add signal handler for changes
  • actions as parent process
  1. merge changes
  2. allow to go concurrent again