Ruby Interpreter with Concurrent GC
C Ruby Emacs Lisp C++ Tcl Ragel in Ruby Host
Fetching latest commit…
Cannot retrieve the latest commit at this time.
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 for information on Ruby itself.

This is built on version 1.9.3-p429.

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