summaryrefslogtreecommitdiffhomepage
path: root/src/gc.c
AgeCommit message (Collapse)Author
2019-01-01range: Embed edges in RRange on boxing environment.KOBAYASHI Shuji
[Breaking changes] Developers must use following APIs for accessing attributes of RRange because RRange structure depends on boxing setting. - mrb_range_beg - mrb_range_end - mrb_range_excl_p
2018-11-01The `env` object referenced from fibers may be freed; fix #4154Yukihiro "Matz" Matsumoto
By dffa203 that reclaim `env` objects from heaps, there's more chance for `env` objects referenced from fibers may be freed from heap pages.
2018-10-29Marking from terminated fibers are not needed; ref #4143Yukihiro "Matz" Matsumoto
The old condition marks the top-level callinfo even after the fiber is terminated.
2018-10-29Need to mark shared env objects as `MRB_TT_FREE`; fix #4143Yukihiro "Matz" Matsumoto
The following code mistakenly exits from the function without marking the env object as `MRB_TT_FREE`. ``` ruby if (MRB_ENV_STACK_SHARED_P(e)) { /* cannot be freed */ return; // <- should be `break` } ```
2018-09-07Clear terminated spacedearblue
2018-08-06irep is released when Fiber is terminatedpyama86
2018-08-01Remove `nregs` member from `mrb_callinfo`.Yukihiro "Matz" Matsumoto
This means reducing one word per a call frame.
2018-07-31Reorganize flags values for classes; fix #3975Yukihiro "Matz" Matsumoto
Renamed flag macro names as well: `MRB_FLAG_IS_FROZEN` -> `MRB_FL_OBJ_FROZEN` `MRB_FLAG_IS_PREPENDED` -> `MRB_FL_CLASS_IS_PREPENDED` `MRB_FLAG_IS_ORIGIN` -> `MRB_FL_CLASS_IS_ORIGIN` `MRB_FLAG_IS_INHERITED` -> `MRB_FL_CLASS_IS_INHERITED`
2018-04-26Fix wrong the number of marked objects of MRB_TT_ENV in gray mark phaseKouhei Sutou
If MRB_TT_ENV has stack shared flag or bidx flag, flags is too large than the real stack size.
2018-04-18Turn off major GC mode before full GC; fix #4000Yukihiro "Matz" Matsumoto
2018-04-14Invoke full GC when too many objects allocated during GC; fix #3998Yukihiro "Matz" Matsumoto
When object allocation rate during incremental GC is too high, the `gc->majorgc_old_threshold` becomes too big. This means major GC start slower and old objects stay longer (and consume too much memory).
2018-04-14Change `MAJOR_GC_INC_RATIO` to 120; ref #3998Yukihiro "Matz" Matsumoto
Because 200% is consumes too much memory for some cases.
2018-04-14Remove `DEFAULT_` from `DEFAULT_MAJOR_GC_INC_RATIO`; ref #3998Yukihiro "Matz" Matsumoto
Because unlike other GC ratio constants, it's not a default value.
2018-02-02Fix possible memory access error.Takeshi Watanabe
2017-11-29Need to free contexts when freeing fibers.Yukihiro "Matz" Matsumoto
Memory leak fixed; ref #3711
2017-11-22Should have marked all ensure stack entries; fix #3855 fix #3856Yukihiro "Matz" Matsumoto
2017-11-19Invoke `mrb_full_gc()` before `ObjectSpace.count_objects`.Yukihiro "Matz" Matsumoto
2017-11-04Merge branch 'master' of github.com:mruby/mrubyYAMAMOTO Masaya
2017-10-31Need to mark fibers referenced from `env`; fix #3837Yukihiro "Matz" Matsumoto
The issue #3837 is a regression of #3819. I was mistakenly removed a important code to mark fibers from `env`.
2017-10-28Heavily refactored how lexical scope links are implemented; fix #3821Yukihiro "Matz" Matsumoto
Instead of `irep` links, we added a `upper` link to `struct RProc`. To make a space for the `upper` link, we moved `target_class` reference. If a `Proc` does not have `env`, `target_class` is saved in an `union` shared with `env` (if a `Proc` has env, you can tell it by `MRB_PROC_ENV_P()). Otherwise `target_class` is referenced from `env->c`. We removed links in `env` as well. This change removes 2 members from `mrb_irep` struct, thus saving 2 words per method/proc/block. This also fixes potential memory leaks due to the circular references caused by a link from `mrb_irep`.
2017-10-11Add MRB_WITHOUT_FLOATYAMAMOTO Masaya
2017-10-11Use division expression instead of some floating point literalsYAMAMOTO Masaya
2017-10-01Add new type of shared string: `RSTR_FSHARED`.Yukihiro "Matz" Matsumoto
`RSTR_FSHARED` use frozen strings as shared body instead of `struct mrb_shared_string`. This reduces allocation from literal strings.
2017-09-29Cut links from `irep` in heaps finalization.Yukihiro "Matz" Matsumoto
2017-09-27fix: src\gc.c(1425): warning C4244: '=': conversion from 'mrb_int' to 'int', ↵Tomasz Dąbrowski
possible loss of data
2017-09-27fix: src\gc.c(1392): warning C4244: '=': conversion from 'mrb_int' to 'int', ↵Tomasz Dąbrowski
possible loss of data
2017-09-27fix: src\gc.c(559): warning C4244: '=': conversion from 'mrb_int' to 'int', ↵Tomasz Dąbrowski
possible loss of data
2017-09-05Avoid recursion from `mark_context()`.Yukihiro "Matz" Matsumoto
2017-09-04Restructure `irep->outer` chain; fix #3804Yukihiro "Matz" Matsumoto
Instead of `irep -> proc` chain, we use `irep -> irep` chain to avoid GC bugs like #3804. We added `target_class` reference to `mrb_irep` struct. That means one more word consumption per `irep`.
2017-08-30Need to mark `mrb->range_class`; fix #3797Yukihiro "Matz" Matsumoto
2017-08-29Revert "Clear `irep->outer` when no `Proc` reference the `irep`; fix #3793"Yukihiro "Matz" Matsumoto
This reverts commit 15d48efa4bf6a6b999dab99720fb9fe3c4a06ef0.
2017-08-28Clear `irep->outer` when no `Proc` reference the `irep`; fix #3793Yukihiro "Matz" Matsumoto
2017-08-19Call `mrb_full_gc` before `gc_each_objects`; ref #3782Yukihiro "Matz" Matsumoto
Otherwise dead object may be seen from `#each_object`.
2017-08-05`proc->body.irep` may be NULL; fix #3761Yukihiro "Matz" Matsumoto
2017-08-01Implements `Module::nesting' (15.2.2.3.2); ref #600, #3200Yukihiro "Matz" Matsumoto
2017-07-27Embed small size array elements in the heap.Yukihiro "Matz" Matsumoto
It reduces the memory consumption and sometimes improve the performance as well. For example, the consumed memory size of `bench/bm_ao_render.rb` is reduced from 1.2GB to 1GB, and its total execution time become 18.795 sec from 22.229 sec.
2017-07-18Simplify `mrb_gc_arena_restore()` to reduce overhead.Yukihiro "Matz" Matsumoto
It will no longer shrink arena region. Instead `vm.c` uses a static function `mrb_gc_arena_shrink()` to shrink.
2017-07-12Avoid float operation to shrink arena buffer size.Yukihiro "Matz" Matsumoto
2017-06-22No need to mark stacks of terminated fibers; fix #3720Yukihiro "Matz" Matsumoto
2017-06-17Merge pull request #3706 from MasahikoSawada/fix_typoYukihiro "Matz" Matsumoto
Fix a typo in gc.c.
2017-06-17Mark the GC arena in `final_marking_phase`.Yukihiro "Matz" Matsumoto
Arena can be modified during the marking phase.
2017-06-17Mark the root context in `final_marking_phase`.Yukihiro "Matz" Matsumoto
Because the root context cannot be marked from fibers.
2017-06-17Mark global variables in `final_marking_phase`; fix #3704Yukihiro "Matz" Matsumoto
2017-06-17Correct comments in gc.cYukihiro "Matz" Matsumoto
2017-06-17Fix a typo in gc.c.Masahiko Sawada
2017-06-16Allow `break` from a block called by `mrb_yield`; close #3359Yukihiro "Matz" Matsumoto
This means #3701 is now OK to merge.
2017-06-16Use `MRB_THROW` instead of `mrb_exc_raise`.Yukihiro "Matz" Matsumoto
2017-06-15Mark the exception object in the final marking phase; ref #3702Yukihiro "Matz" Matsumoto
2017-06-03Prohibit changing generational mode during GC disabled; fix #3689Yukihiro "Matz" Matsumoto
2017-06-01Avoid invoking GC when disabled or iterating; fix #3681Yukihiro "Matz" Matsumoto