go中make和new的区别,为什么小对象多了会造成gc压力,无缓冲 Chan 的发送和接收是否同步

本文介绍了Go语言中make与new的区别,make主要用于初始化slice、map和channel,返回引用类型,而new分配内存并置零,返回类型指针。小对象过多会增加GC压力,因为三色标记法需要更多计算。对于无缓冲的channel,发送和接收操作是同步的,而有缓冲channel则允许异步操作。理解这些概念有助于优化Go程序的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

区别

make和new都是内存的分配(堆上)
make用于slice、map以及channel的初始化(非零值),会返回一个相应类型的
new对象进行内存分配,并且内存置为零,会返回一个相应类型的指针
make返回的是引用类型本身;而new返回的是指向类型的指针。
make是引用类型的初始化方法

Golang的内存模型,为什么小对象多了会造成gc压力。

通常小对象过多会导致GC三色法消耗过多的GPU。优化思路是,减少对象分配

无缓冲 Chan 的发送和接收是否同步?

ch := make(chan int) 无缓冲的channel由于没有缓冲发送和接收需要同步.
ch := make(chan int, 2) 有缓冲channel不要求发送和接收操作同步.
channel无缓冲时,发送阻塞直到数据被接收,接收阻塞直到读到数据。
channel有缓冲时,当缓冲满时发送阻塞,当缓冲空时接收阻塞。
八股

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值