Module: MallocTrim

Defined in:
lib/malloc_trim.rb,
lib/malloc_trim/version.rb,
ext/malloc_trim/malloc_trim.c

Defined Under Namespace

Classes: Error

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.disable_trimmingObject



50
51
52
53
54
55
56
57
58
59
60
# File 'ext/malloc_trim/malloc_trim.c', line 50

static VALUE disable_trimming(VALUE self) {
  #ifndef HAVE_MALLOC_TRIM
    return Qnil;
  #endif

  if (RB_TEST(objtracer)) {
    rb_tracepoint_disable(objtracer);
  }
  objtracer = Qnil;
  return Qtrue;
}

.enable_trimmingObject



38
39
40
41
42
43
44
45
46
47
48
# File 'ext/malloc_trim/malloc_trim.c', line 38

static VALUE enable_trimming(VALUE self) {
  #ifndef HAVE_MALLOC_TRIM
    return Qnil;
  #endif

  if (!RB_TEST(objtracer)) {
    objtracer = rb_tracepoint_new(0, RUBY_INTERNAL_EVENT_GC_END_MARK, malloc_trim_gc_end_handler, 0);
  }
  rb_tracepoint_enable(objtracer);
  return Qtrue;
}

.trimObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'ext/malloc_trim/malloc_trim.c', line 7

static VALUE do_malloc_trim(VALUE self) {
  /* [Experimental] Explicitly free all eligible pages to the kernel.  See:
   *
   * - https://www.joyfulbikeshedding.com/blog/2019-03-14-what-causes-ruby-memory-bloat.html
   * - https://bugs.ruby-lang.org/issues/15667
   * - http://man7.org/linux/man-pages/man3/malloc_trim.3.html
   */
  #ifdef HAVE_MALLOC_TRIM
    if (malloc_trim(0) == 1) {
      return Qtrue; // it could return some memory
    } else {
      return Qfalse; // no memory was returned
    };
  #endif
  return Qnil;
}

.trimming_possible?Boolean



24
25
26
27
28
29
30
# File 'ext/malloc_trim/malloc_trim.c', line 24

static VALUE has_malloc_trim(VALUE self) {
  #ifdef HAVE_MALLOC_TRIM
  return Qtrue;
  #else
  return Qfalse;
  #endif
}