您现在的位置是:网站首页> 新闻快讯> 软件使用 新闻快讯
reflect(reflectance)
小玉2023-07-05【软件使用】
332人已围观
简介golang1.20引入新特性arena,支持手动分配和释放内存,初步测试性能提升5%-15%甚至更多,真的是起飞了!尽管目前还是实验特性,对于

reflect(reflectance)
最后更新:2023-07-05 05:18:20
推荐指数:
golang1.20引入新特性arena,支持手动分配和释放内存,初步测试性能提升5%-15%甚至更多,真的是起飞了!尽管目前还是实验特性,对于泛型和反射reflect都已支持相当完善,常用场景比如JSON解析/ProtoBuf反序列化都会产生不少提升!arena一个内存池的技术——创建一个大的连续内存块,该内存块只需要预先分配一次,然后在此内存上创建对象,使用完后统一释放内存。使用arena只需要分配一次内存,所有对象都在池中管理,手动选择合适的时机释放。开启arena目前还是实验特性,可如下任意开启定义环境变量:exportGOEXPERIMENT=arenas运行程序同时开启:GOEXPERIMENT=arenasgorunmain.go指定BuildTag:gorunmain.go-tagsgoexperiment.arenas编写相关代码,可在需要开启arena特性文件增加//go:buildgoexperiment.arenas。使用步骤1.创建arena内存池,不需要时释放NewArena():创建一个Arena,可以创建多个Arena,批量创建一批对象,统一手工释放。它不是线程安全的。Free():释放Arena以及它上面创建出来的所有对象。2.从池中分配需要的空间当前只支持具体对象和slice,还没有实现MakeMap、MakeChan这样在Arena上创建map和channel的方法,后续可能会加上。NewTany*T:创建一个对象MakeSliceTany[]T:在Arena创建一个Slice。3.如果希望内存池被释放后还使用,可拷贝到堆分配空间上CloneTany:克隆一个Arena上对象,只能是指针、slice或者字符串。如果传入的对象不是在Arena分配的,直接原对象返回,否则脱离Arena创建新的对象。
很赞哦! (0)
下一篇:丧尸围城(丧尸围城电影)
相关文章
文章评论
验证码: