On Wednesday, August 17, 2022 at 8:18:35 PM UTC-7 tapi...@gmail.com wrote:

> I'm a bit wondering about how the following case will be affected by the 
> change:
> 1. Initially, there is one goroutine, which stack size is large at the 
> time of a GC process.
> 2. After the GC process, a large quantity of goroutines start. They all 
> need small stacks.
>    But now the runtime will allocate a very large stack for each of them.
>
> Then is much memory wasted?
>

Kind of. Your description is correct, the runtime will allocate larger 
stacks for each of the new goroutines. But it doesn't really waste memory, 
it just causes the program to reach the next GC earlier. At that GC, stacks 
will shrink, as will the start size for subsequent goroutines. So it won't 
really waste memory, but waste some CPU for a possibly extra GC.
It isn't perfect; for instance we only shrink stacks 2x at each GC, so if 
the starting size is way too large it might take a couple GCs to shrink 
sufficiently.
 

> Will the stacks of the new goroutines shrink at the next GC process?
>

Yes. The larger stack sizes are only on goroutine start. The runtime 
doesn't forbid shrinking below the start size.
 

>
> On Saturday, August 13, 2022 at 10:00:58 PM UTC+8 lia...@garena.com wrote:
>
>> Hi masters,
>>
>> As far as I know, go 1.19 supports self-adaptive stack size when spawning 
>> a goroutine, which intends to decrease the calling times of morestack that 
>> aims to claim more frames from heap.
>>
>> After each GC happens, Go runtime will calculate the average stack usage 
>> and the next time, goroutine would created with such a stack size.
>>
>> My question is, how do we validate the whole process or check it if works 
>> well or not.
>> Is there any metric or stack size checking function, or should I use 
>> pprof to peek the alloc part ?
>>
>> Kindly thanks for all
>>
>> ```
>> func main() {
>> go func() {
>> // spawn a goroutine started from a fixed stack size
>> }()
>>
>> runtime.GC()
>>
>> go func() {
>> // spawn a goroutine started from an avg stack size. 
>> }()
>> }
>> ```
>>
>>
>>

-- 
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/8dd98462-35d2-4faf-b71c-a4b500b6a1ddn%40googlegroups.com.

Reply via email to