Skip to content

Instantly share code, notes, and snippets.

@xjdrew
Created October 8, 2019 14:21
Show Gist options
  • Save xjdrew/bc348b1c2af1bab9984a5b6e520ef35e to your computer and use it in GitHub Desktop.
Save xjdrew/bc348b1c2af1bab9984a5b6e520ef35e to your computer and use it in GitHub Desktop.
lua gc test case
local count = 10000
local items = 10000
local g = {}
collectgarbage("stop")
function run_gc_test(tag, mt)
for i=1,count do
local t = {}
if mt then
setmetatable(t, mt)
end
for j=1,items do
t[j] = {}
end
g[#g+1] = t
end
local mem = collectgarbage("count")
print(tag, "memory size before gc:", mem)
local finished
while not finished do
local t0 = os.clock()
finished = collectgarbage("step", 100000)
local t1 = os.clock()
print(tag, "table gc step, consumed:",finished, t1-t0)
end
local mem = collectgarbage("count")
print(tag, "memory size after gc:", mem)
end
for i=1, 50 do
print("======== round", i)
--run_gc_test("gc metamethod", {__gc=function(o) end})
run_gc_test("simple")
--run_gc_test("weak table", {__mode="v"})
end
======== round 1
simple memory size before gc: 8029580.5449219
++++++ gcstate: 7 -> 0 +++++++
simple table gc step, consumed: false 0.08023
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.038946000000003
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.053604
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.046549000000002
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.045299999999997
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.046872999999998
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.049885
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.052053000000001
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.047357999999999
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.046369000000002
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.051092000000001
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.048818000000001
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.047307
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.045746999999999
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.052253999999998
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.041041
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.058584
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.185741
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.249438
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.21657
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.224915
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.236445
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.214558
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.186554
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.188677
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.208974
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.218669
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.210864
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.208496
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.205281
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.208982
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.212862
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.210816
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.212025
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.21422
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.209858
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.210246
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.220917
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.256822
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.314258
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.286934
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.241109
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.21705
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.234824
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.220309
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.222933
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.223696
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.226823
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.227693
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.223481
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.222663
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.226209
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.2347
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.225192
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.238531
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.259061
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.223961
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.229892
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.235737
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.23717
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.231842
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.229655
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.218181
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.221824
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.225791
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.226298
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.22205
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.222908
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.223668
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.217165
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.224236
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.224186
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.218289
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.213076
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.220979
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.223594
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.217259
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.216023
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.222395
++++++ gcstate: 0 -> 0 +++++++
simple table gc step, consumed: false 0.217481
++++++ gcstate: 0 -> 2 +++++++
simple table gc step, consumed: false 1.307541
++++++ gcstate: 2 -> 2 +++++++
simple table gc step, consumed: false 1.731343
++++++ gcstate: 2 -> 2 +++++++
simple table gc step, consumed: false 1.711169
++++++ gcstate: 2 -> 2 +++++++
simple table gc step, consumed: false 1.760332
++++++ gcstate: 2 -> 2 +++++++
simple table gc step, consumed: false 1.770299
++++++ gcstate: 2 -> 2 +++++++
simple table gc step, consumed: false 1.714799
++++++ gcstate: 2 -> 2 +++++++
simple table gc step, consumed: false 1.744867
++++++ gcstate: 2 -> 7 +++++++
simple table gc step, consumed: true 0.232102
simple memory size after gc: 8029580.4863281
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment