diff --git a/configure.ac b/configure.ac index 30a1350fa6..70400dd797 100644 --- a/configure.ac +++ b/configure.ac @@ -2078,6 +2078,7 @@ AC_CHECK_FUNCS(lstat) AC_CHECK_FUNCS(lutimes) AC_CHECK_FUNCS(malloc_usable_size) AC_CHECK_FUNCS(malloc_size) +AC_CHECK_FUNCS(malloc_trim) AC_CHECK_FUNCS(mblen) AC_CHECK_FUNCS(memalign) AC_CHECK_FUNCS(memset_s) diff --git a/gc.c b/gc.c index 3fd2a3b33f..662ddc3e0f 100644 --- a/gc.c +++ b/gc.c @@ -9740,6 +9740,10 @@ rb_gc_prepare_heap(void) rb_objspace_each_objects(gc_set_candidate_object_i, NULL); gc_start_internal(NULL, Qtrue, Qtrue, Qtrue, Qtrue, Qtrue); free_empty_pages(); + +#if defined(HAVE_MALLOC_TRIM) && !defined(RUBY_ALTERNATIVE_MALLOC_HEADER) + malloc_trim(0); +#endif } static int diff --git a/process.c b/process.c index d7e04830ee..690872ad36 100644 --- a/process.c +++ b/process.c @@ -8789,6 +8789,7 @@ static VALUE rb_mProcID_Syscall; * * Precomputes the coderange of all strings. * * Frees all empty heap pages and increments the allocatable pages counter * by the number of pages freed. + * * Invoke +malloc_trim+ if available to free empty malloc pages. */ static VALUE