База Hintsage

Память и GC

Аллокации, escape analysis, сборщик мусора и производительность.

Практика

Вопросы: Память и GC

Определите, сможет ли сборщик мусора Go освободить объекты после завершения makeCycle, несмотря на взаимные ссылки.

package main

import "runtime"

type Node struct {
    next *Node
    data [1024]byte
}

func makeCycle() {
    a := new(Node)
    b := new(Node)
    a.next = b
    b.next = a
    runtime.KeepAlive(a)
}

func main() {
    makeCycle()
    runtime.GC()
}
Программирование GoПамять и GCGo-разработчик серверных приложений

Оцените, какой из массивов создаёт меньшую нагрузку на маркировку GC при сопоставимом размере данных. Объясните, какую роль играет наличие указателей в типе.

package main

import "runtime"

type Bytes struct {
    data [1024]byte
}

type Ptrs struct {
    data [128]*byte
}

func main() {
    b := make([]Bytes, 10_000)
    p := make([]Ptrs, 10_000)
    runtime.KeepAlive(b)
    runtime.KeepAlive(p)
}
Программирование GoПамять и GCРазработчик Go уровня middle

Показано 1–20 из 50