public class GC
extends java.lang.Object
GC keeps track of native handles and associates them with their corresponding Java objects
to avoid garbage-collection while either is in use. It will remove unused references when a thread exits native code
or the VM runs out of memory.| Modifier and Type | Field and Description |
|---|---|
private static java.util.concurrent.ScheduledExecutorService |
executor |
private static java.util.concurrent.atomic.AtomicInteger |
gcDisable |
private static java.util.concurrent.Future<?> |
gcFuture |
private static java.lang.Runnable |
gcTask |
private static java.util.Map<java.lang.Object,Handle> |
nativeHandles |
private static java.lang.ref.Reference<java.lang.Object> |
reaper |
| Constructor and Description |
|---|
GC() |
| Modifier and Type | Method and Description |
|---|---|
(package private) static void |
cleanup() |
(package private) static void |
disable() |
(package private) static void |
enable() |
(package private) static void |
init(Native n) |
(package private) static Handle |
lookup(IRubyObject obj) |
static void |
mark(IRubyObject obj)
This is an upcall from the C++ stub to mark objects that are only strongly
reachable from a C VALUE instance.
|
(package private) static void |
register(IRubyObject obj,
Handle h)
Called from Handle.valueOf
|
static void |
trigger() |
private static final java.util.Map<java.lang.Object,Handle> nativeHandles
private static final java.util.concurrent.ScheduledExecutorService executor
private static volatile java.lang.ref.Reference<java.lang.Object> reaper
private static java.lang.Runnable gcTask
private static volatile java.util.concurrent.Future<?> gcFuture
private static final java.util.concurrent.atomic.AtomicInteger gcDisable
public static final void mark(IRubyObject obj)
obj - The object to markpublic static final void trigger()
static void init(Native n)
static final Handle lookup(IRubyObject obj)
static final void register(IRubyObject obj, Handle h)
obj - static final void cleanup()
static void disable()
static void enable()