On Wednesday, March 22, 2017 at 6:00:12 PM UTC+8, Dave Cheney wrote:
>
>
>
> On Wednesday, 22 March 2017 20:51:18 UTC+11, T L wrote:
>>
>>
>>
>> On Wednesday, March 22, 2017 at 4:56:28 PM UTC+8, Dave Cheney wrote:
>>>
>>> The comment on 
>>>
>>> https://github.com/golang/go/blob/master/src/runtime/mgc.go#L47
>>>
>>> //    c. GC performs root marking jobs. This includes scanning all
>>> //    stacks, shading all globals, and shading any heap pointers in
>>> //    off-heap runtime data structures. Scanning a stack stops a
>>> //    goroutine, shades any pointers found on its stack, and then
>>> //    resumes the goroutine. 
>>>
>>
>>> Suggests there are a few runtime internal data structures. 
>>>
>>
>> Thanks for the link. 
>>
>> I was just curious on where heap pointers of local allocated memory 
>> blocks are stored.
>> So there is the third kind of root, off-heap runtime data structures, to 
>> store heap pointers of local allocated memory blocks.
>>
>
> There are various memory structures that are not managed by the garbage 
> collector. The native stacks for operating system threads are an example. 
> They are invisible to the garbage collector for obvious reasons.
>  
>
>>  
>>
>>> But from the POV of a programmer, it's globals, and things reachable 
>>> from each goroutine's stack. 
>>>
>>
>>  More accurately, I think it should be: from the POV of a programmer, 
>> it's globals, and things reachable from each goroutine.
>>
>
> Which is package level variables visible to all goroutines and values on 
> each goroutines's stack (as they cannot see values on another goroutine's 
> stack) 
>

But many heap pointers are not referenced by stacks.
I guess each goroutine maintains an off-heap runtime data structures to 
store the heap pointers.
 

>
>>
>>> On Wednesday, 22 March 2017 19:51:40 UTC+11, T L wrote:
>>>>
>>>>
>>>>
>>>> On Wednesday, March 22, 2017 at 4:33:21 PM UTC+8, Dave Cheney wrote:
>>>>>
>>>>>
>>>>>
>>>>> On Wednesday, 22 March 2017 19:29:02 UTC+11, T L wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Wednesday, March 22, 2017 at 4:08:02 PM UTC+8, Dave Cheney wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Wednesday, 22 March 2017 19:04:36 UTC+11, T L wrote:
>>>>>>>>
>>>>>>>> In this article: https://blog.golang.org/go15gc , it mentions
>>>>>>>>
>>>>>>>> ..., The GC visits all *roots*, which are objects directly 
>>>>>>>>> accessible by the application such as globals and things on the 
>>>>>>>>> stack, and 
>>>>>>>>> colors these grey. ...
>>>>>>>>
>>>>>>>>
>>>>>>>> It lists two kinds of root objects: globals and objects on stacks.
>>>>>>>> My question is how objects on heap will be visited?
>>>>>>>>
>>>>>>>
>>>>>>> By walking the heap (there are some optimisations to avoid areas of 
>>>>>>> memory where no objects are known to be stored)
>>>>>>>
>>>>>>
>>>>>> Walking the heap is at collecting stage? Will the heap be walked at 
>>>>>> analyzing stage?
>>>>>>
>>>>>
>>>>> Garbage collection has two main phases; mark and sweep. The heap is 
>>>>> walked during the marking phase. 
>>>>>
>>>>>>  
>>>>>>
>>>>>>>  
>>>>>>>
>>>>>>>> For every object on heap, is it always been referenced by another 
>>>>>>>> global object or another object on a stack?
>>>>>>>>
>>>>>>>
>>>>>>> Yes, otherwise it's garbage :) 
>>>>>>>
>>>>>>  
>>>>>>
>>>>> So when a memory block for a local object is allocated on heap, there 
>>>>>> will be also a pointer, which stores the address of the memory block, 
>>>>>> recorded on stack?
>>>>>>
>>>>>  
>>>>> When memory is allocated on the heap, memory is allocated on the heap; 
>>>>> that's it. The garbage collector records the details of the type of the 
>>>>> allocation in the heap alongside the object for most* allocations.
>>>>>
>>>>> * for small allocations they go into their own areas; google slab 
>>>>> allocator.
>>>>>
>>>>> So that the memory block on heap will be tracked from stack?
>>>>>>
>>>>>
>>>>> From any gc root. The point is if there is no path from a gc root to 
>>>>> an area of memory on the heap, that area is unreachable and therefore can 
>>>>> be reused.
>>>>>
>>>>
>>>> except globals and stack objects, are there any other roots?
>>>>  
>>>>
>>>>>  
>>>>>
>>>>>>  
>>>>>>
>>>>>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to