vetr icon indicating copy to clipboard operation
vetr copied to clipboard

Reduce Frequency of Garbage Collection

Open brodieG opened this issue 6 years ago • 1 comments

Clearly qassert triggers way fewer GCs:

> gcinfo(TRUE)
[1] TRUE
> simple_vet <- function(x) vet(numeric(2L) && !anyNA(.), x, stop=TRUE)
> nums <- runif(2)
> for(i in 1:5e4) simple_vet(nums)
Garbage collection 206 = 155+20+31 (level 0) ... 
35.8 Mbytes of cons cells used (38%)
16.4 Mbytes of vectors used (32%)
Garbage collection 207 = 156+20+31 (level 0) ... 
35.8 Mbytes of cons cells used (38%)
16.4 Mbytes of vectors used (32%)
Garbage collection 208 = 157+20+31 (level 0) ... 
35.8 Mbytes of cons cells used (38%)
16.5 Mbytes of vectors used (32%)
Garbage collection 209 = 157+21+31 (level 1) ... 
35.8 Mbytes of cons cells used (38%)
16.4 Mbytes of vectors used (32%)
Garbage collection 210 = 158+21+31 (level 0) ... 
35.8 Mbytes of cons cells used (38%)
16.4 Mbytes of vectors used (32%)
Garbage collection 211 = 159+21+31 (level 0) ... 
35.8 Mbytes of cons cells used (38%)
16.4 Mbytes of vectors used (32%)
Garbage collection 212 = 160+21+31 (level 0) ... 
35.8 Mbytes of cons cells used (38%)
16.4 Mbytes of vectors used (32%)
Garbage collection 213 = 161+21+31 (level 0) ... 
35.8 Mbytes of cons cells used (38%)
16.4 Mbytes of vectors used (32%)
Garbage collection 214 = 162+21+31 (level 0) ... 
35.8 Mbytes of cons cells used (38%)
16.4 Mbytes of vectors used (32%)
Garbage collection 215 = 163+21+31 (level 0) ... 
35.8 Mbytes of cons cells used (38%)
16.4 Mbytes of vectors used (32%)
Garbage collection 216 = 164+21+31 (level 0) ... 
35.8 Mbytes of cons cells used (38%)
16.4 Mbytes of vectors used (32%)
Garbage collection 217 = 165+21+31 (level 0) ... 
35.8 Mbytes of cons cells used (38%)
16.4 Mbytes of vectors used (32%)
Garbage collection 218 = 166+21+31 (level 0) ... 
35.8 Mbytes of cons cells used (38%)
16.4 Mbytes of vectors used (32%)
Garbage collection 219 = 167+21+31 (level 0) ... 
35.8 Mbytes of cons cells used (38%)
16.4 Mbytes of vectors used (32%)
> simple_2 <- function(x) qassert(x, "N2")
> for(i in 1:5e4) simple_qassert(nums)
Error in simple_qassert(nums) : could not find function "simple_qassert"
> for(i in 1:5e4) simple_2(nums)
Garbage collection 220 = 168+21+31 (level 0) ... 
35.8 Mbytes of cons cells used (38%)
16.5 Mbytes of vectors used (32%)

brodieG avatar Sep 07 '17 00:09 brodieG

Part of the issue is we use R_alloc to initialize strings for every possible step an error could occur, which creates dozens of likely unnecessary allocations.

brodieG avatar Mar 03 '20 01:03 brodieG