Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 如何去';什么是精确的GC工作?_Memory_Go_Garbage Collection - Fatal编程技术网

Memory 如何去';什么是精确的GC工作?

Memory 如何去';什么是精确的GC工作?,memory,go,garbage-collection,Memory,Go,Garbage Collection,Go 1.3实现了一个垃圾收集器 它是如何精确地识别指针的?看看“”,机制似乎很简单: 从Go 1.3开始,运行时假定指针类型的值包含指针,而其他值不包含指针 这个假设对于堆栈扩展和垃圾收集的精确行为都是基本的 使用“包不安全”将整数存储在指针类型值中的程序是非法的,如果运行时检测到该行为,该程序将崩溃。 使用“包不安全”将指针存储在整型值中的程序也是非法的,但在执行期间更难诊断 本条加上: 基本上,GC必须找出哪些对象是可访问的,要做到这一点,它必须跟随堆栈上的指针指向它们指向的每个对象,然后

Go 1.3实现了一个垃圾收集器

它是如何精确地识别指针的?

看看“”,机制似乎很简单:

从Go 1.3开始,运行时假定指针类型的值包含指针,而其他值不包含指针

这个假设对于堆栈扩展和垃圾收集的精确行为都是基本的

使用“包不安全”将整数存储在指针类型值中的程序是非法的,如果运行时检测到该行为,该程序将崩溃。
使用“包不安全”将指针存储在整型值中的程序也是非法的,但在执行期间更难诊断

本条加上:

基本上,GC必须找出哪些对象是可访问的,要做到这一点,它必须跟随堆栈上的指针指向它们指向的每个对象,然后跟随对象中的指针指向它们指向的每个对象,直到不再遇到新对象。
GC没有遇到的每个对象都是垃圾

问题是它要求GC知道指针是什么:

  • 一个精确的GC拥有这些信息
  • 保守GC必须假设堆栈上的每个值都可能是指针,如果它与分配对象的地址相同
因此,conservate GCs倾向于保留大量无法访问的对象,并且必须做更多的工作(遍历死对象图)