The documentation of the GC() function states:

"GC runs a garbage collection and blocks the caller until the garbage 
collection is complete. It may also block the entire program."

Based on the documentation, I assumed that a garbage collection would be 
really complete by calling GC. By complete I mean that no garbage is left 
over.

Apparently It’s not the case. Is it possible learn a bit more on this ? Why 
would the GC not garbage collect everything when GC() is called ? 

It would have been convenient for detecting memory leaks to be able to 
compare memory Alloc before and after the checked task and a really 
complete GC. 




Le vendredi 6 mars 2020 15:26:33 UTC+1, Volker Dobler a écrit :
>
> This is normal behaviour and not a leak.
> Nothing is leaking in your code (and it is generally
> hard to leak RAM). The allocations will be reclaimed.
>
> V.
>
> On Friday, 6 March 2020 14:11:37 UTC+1, Christophe Meessen wrote:
>>
>> I wanted to check my program for go routine and memory leaks. In doing so 
>> I detected what resemble a memory leak while my program was doing nothing. 
>>
>> Here is a minimal program that reproduces the problem. The program 
>> collects and prints the total number of bytes allocated and the number of 
>> blocks. 
>>
>> package main
>>
>> import (
>> "runtime"
>>
>> func main() {
>> var m runtime.MemStats
>> ticker := time.NewTicker(20 * time.Second)
>> for {
>> runtime.ReadMemStats(&m)
>> println("status: memUsed:", m.Alloc, "allocs:", m.Mallocs-m.Frees, 
>> "numGC", m.NumGC)
>> <-ticker.C
>> runtime.GC()
>> }
>> }
>>
>> What I see is a slow but steady increase of memUse and allocs. The memUse 
>> grows by 4 to 96 bytes every 40 to 60 seconds. 
>> Is this a feature of the GC or is this a memory leak in one of the called 
>> functions ? 
>>
>> Note that I use println because the "leak" is much more important when I 
>> use fmt.Println of log.Println. I also use ticker because I was told it 
>> would be better than time.Sleep, but I don’t see any significant difference 
>> in the "leak" when I use one or the other. 
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/b8103128-8ae8-42fb-8b3f-4d5265632246%40googlegroups.com.

Reply via email to