ORC: make the adaptive strategy the default in order to fight memory consumption (#16250)

* ORC: make the adaptive strategy the default in order to fight memory consumption

* added missing test case
This commit is contained in:
Andreas Rumpf
2020-12-05 23:15:17 +01:00
committed by GitHub
parent 70d4df0516
commit af7f7726fe
3 changed files with 52 additions and 7 deletions

View File

@@ -1,5 +1,5 @@
discard """
outputsub: "(allocCount: 4014, deallocCount: 4012)"
outputsub: "(allocCount: 4302, deallocCount: 4300)"
cmd: "nim c --gc:orc -d:nimAllocStats $file"
"""

38
tests/arc/torcbench.nim Normal file
View File

@@ -0,0 +1,38 @@
discard """
output: '''true peak memory: true'''
cmd: "nim c --gc:orc -d:release $file"
"""
import lists, strutils, times
type
Base = ref object of RootObj
Node = ref object of Base
parent: DoublyLinkedList[string]
le, ri: Node
self: Node # in order to create a cycle
proc buildTree(parent: DoublyLinkedList[string]; depth: int): Node =
if depth == 0:
result = nil
elif depth == 1:
result = Node(parent: parent, le: nil, ri: nil, self: nil)
when not defined(gcArc):
result.self = result
else:
result = Node(parent: parent, le: buildTree(parent, depth - 1), ri: buildTree(parent, depth - 2), self: nil)
result.self = result
proc main() =
for i in countup(1, 100):
var leakList = initDoublyLinkedList[string]()
for j in countup(1, 5000):
leakList.append(newString(200))
#GC_fullCollect()
for i in 0..400:
discard buildTree(leakList, 8)
main()
GC_fullCollect()
echo getOccupiedMem() < 10 * 1024 * 1024, " peak memory: ", getMaxMem() < 10 * 1024 * 1024