JavaScript:SpiderMonkey:GC Futures
Jump to navigation
Jump to search
JS GC Futures
Tracking bug is bug 505308
Brain-dump of work items:
- Speed up allocator
- remove or mitigate locking ????
- Use one single GC heap chunk, avoiding frequent mmap and malloc calls bug 506174
- Speed up collector
- Allocate short-enough strings from GC heap, not malloc heap bug 402614
- Allocate object dslots from GC heap, not malloc heap? Alternative: [bug NNNNNN]
- Based on Gregor's stats consider making 32-byte and 64-byte JSObjects to cover most cases except large objects without any dslots bug 508357
- Remove byte flag per thing design [bug NNNNNN]
- Bad cache effects of flags and things allocated from opposite ends of same arena
- Don't want generality of different thing-types allocated from same size class
- Can put finalizer or other index/info in the pool, not in each flag's low bits [bug NNNNNN]
- Compress flags to mark bit in bitmap? [bug NNNNNN]
- Add new JNI-like (handles, "clothed" not "naked") global rooting API
- But use C++ to best effect (auto storage class RAII helpers, templates)
- Make old JS global rooting API be #ifdef JS_NAKED_GC_ROOTS (enabled at first) [bug NNNNNN]
- Convert mozilla-central to use new global rooting API [bug NNNNNN]
- Disable JS_NAKED_GC_ROOTS [bug NNNNNN]
- What about local roots? [bug NNNNNNN]
- Need write barrier, efficient auto-temp-value rooting [bug NNNNNNN]
- No naked argv[i] writes [bug NNNNNNN]
- Conservative stack scanning to avoid temp-value rooting overheads? [bug NNNNNNN]
- Andreas and Brendan think this is likely best (safety, clean code)
- Equivalent to well-used (i.e. seldom-used) pinning API in effect but contained:
- GC from shallow stack
- clear event loop locals that might entrain garbage
- 8/4/2009 NEEDS PROMPT INVESTIGATION
- GC safety static analysis
- Write barrier for all code including JITted code
- Write barrier in API
- write barriers may make natives slower
- Make GC heap per thread (in JSThreadData)
- New API for making MT-accessible objects
- Objects are ST-accessible only without new API usage
- Safest course for API: #ifdef JS_AUTO_MT_OBJECTS for existing API, new API entry points (C++ API, rather) for new ST vs. MT create-object methods [bug NNNNNNN]
- Switch mozilla-central code over, turn off JS_AUTO_MT_OBJECTS [bug NNNNNNN]
- Fast generational copying allocation and collection [bug NNNNNNN]
- Go to beach