diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
index 774c96b..c12a59e 100644
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -63,8 +63,8 @@
 # Individual tests, including the ones part of test_alot.
 # Please keep sorted up to test_alot.
 NEW_TESTS = \
-	test_arglist \
 	test_arabic \
+	test_arglist \
 	test_assert \
 	test_assign \
 	test_autochdir \
@@ -108,11 +108,11 @@
 	test_ex_equal \
 	test_ex_undo \
 	test_ex_z \
-	test_exit \
 	test_exec_while_if \
 	test_execute_func \
 	test_exists \
 	test_exists_autocmd \
+	test_exit \
 	test_expand \
 	test_expand_dllpath \
 	test_expand_func \
@@ -179,6 +179,7 @@
 	test_match \
 	test_matchadd_conceal \
 	test_matchadd_conceal_utf8 \
+	test_memory_usage \
 	test_menu \
 	test_messages \
 	test_mksession \
@@ -355,6 +356,7 @@
 	test_maparg.res \
 	test_marks.res \
 	test_matchadd_conceal.res \
+	test_memory_usage.res \
 	test_mksession.res \
 	test_nested_function.res \
 	test_netbeans.res \
diff --git a/src/testdir/test_memory_usage.vim b/src/testdir/test_memory_usage.vim
new file mode 100644
index 0000000..23dcc62
--- /dev/null
+++ b/src/testdir/test_memory_usage.vim
@@ -0,0 +1,144 @@
+" Tests for memory usage.
+
+if !has('terminal') || has('gui_running') || $ASAN_OPTIONS !=# ''
+  " Skip tests on Travis CI ASAN build because it's difficult to estimate
+  " memory usage.
+  finish
+endif
+
+source shared.vim
+
+func s:pick_nr(str) abort
+  return substitute(a:str, '[^0-9]', '', 'g') * 1
+endfunc
+
+if has('win32')
+  if !executable('wmic')
+    finish
+  endif
+  func s:memory_usage(pid) abort
+    let cmd = printf('wmic process where processid=%d get WorkingSetSize', a:pid)
+    return s:pick_nr(system(cmd)) / 1024
+  endfunc
+elseif has('unix')
+  if !executable('ps')
+    finish
+  endif
+  func s:memory_usage(pid) abort
+    return s:pick_nr(system('ps -o rss= -p ' . a:pid))
+  endfunc
+else
+  finish
+endif
+
+" Wait for memory usage to level off.
+func s:monitor_memory_usage(pid) abort
+  let proc = {}
+  let proc.pid = a:pid
+  let proc.hist = []
+  let proc.min = 0
+  let proc.max = 0
+
+  func proc.op() abort
+    " Check the last 200ms.
+    let val = s:memory_usage(self.pid)
+    if self.min > val
+      let self.min = val
+    elseif self.max < val
+      let self.max = val
+    endif
+    call add(self.hist, val)
+    if len(self.hist) < 20
+      return 0
+    endif
+    let sample = remove(self.hist, 0)
+    return len(uniq([sample] + self.hist)) == 1
+  endfunc
+
+  call WaitFor({-> proc.op()}, 10000)
+  return {'last': get(proc.hist, -1), 'min': proc.min, 'max': proc.max}
+endfunc
+
+let s:term_vim = {}
+
+func s:term_vim.start(...) abort
+  let self.buf = term_start([GetVimProg()] + a:000)
+  let self.job = term_getjob(self.buf)
+  call WaitFor({-> job_status(self.job) ==# 'run'})
+  let self.pid = job_info(self.job).process
+endfunc
+
+func s:term_vim.stop() abort
+  call term_sendkeys(self.buf, ":qall!\<CR>")
+  call WaitFor({-> job_status(self.job) ==# 'dead'})
+  exe self.buf . 'bwipe!'
+endfunc
+
+func s:vim_new() abort
+  return copy(s:term_vim)
+endfunc
+
+func Test_memory_func_capture_vargs()
+  " Case: if a local variable captures a:000, funccall object will be free
+  " just after it finishes.
+  let testfile = 'Xtest.vim'
+  call writefile([
+        \ 'func s:f(...)',
+        \ '  let x = a:000',
+        \ 'endfunc',
+        \ 'for _ in range(10000)',
+        \ '  call s:f(0)',
+        \ 'endfor',
+        \ ], testfile)
+
+  let vim = s:vim_new()
+  call vim.start('--clean', '-c', 'set noswapfile', testfile)
+  let before = s:monitor_memory_usage(vim.pid).last
+
+  call term_sendkeys(vim.buf, ":so %\<CR>")
+  call WaitFor({-> term_getcursor(vim.buf)[0] == 1})
+  let after = s:monitor_memory_usage(vim.pid)
+
+  " Estimate the limit of max usage as 2x initial usage.
+  call assert_inrange(before, 2 * before, after.max)
+  " In this case, garbase collecting is not needed.
+  call assert_equal(after.last, after.max)
+
+  call vim.stop()
+  call delete(testfile)
+endfunc
+
+func Test_memory_func_capture_lvars()
+  " Case: if a local variable captures l: dict, funccall object will not be
+  " free until garbage collector runs, but after that memory usage doesn't
+  " increase so much even when rerun Xtest.vim since system memory caches.
+  let testfile = 'Xtest.vim'
+  call writefile([
+        \ 'func s:f()',
+        \ '  let x = l:',
+        \ 'endfunc',
+        \ 'for _ in range(10000)',
+        \ '  call s:f()',
+        \ 'endfor',
+        \ ], testfile)
+
+  let vim = s:vim_new()
+  call vim.start('--clean', '-c', 'set noswapfile', testfile)
+  let before = s:monitor_memory_usage(vim.pid).last
+
+  call term_sendkeys(vim.buf, ":so %\<CR>")
+  call WaitFor({-> term_getcursor(vim.buf)[0] == 1})
+  let after = s:monitor_memory_usage(vim.pid)
+
+  " Rerun Xtest.vim.
+  for _ in range(3)
+    call term_sendkeys(vim.buf, ":so %\<CR>")
+    call WaitFor({-> term_getcursor(vim.buf)[0] == 1})
+    let last = s:monitor_memory_usage(vim.pid).last
+  endfor
+
+  call assert_inrange(before, after.max + (after.last - before), last)
+
+  call vim.stop()
+  call delete(testfile)
+endfunc
