栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

收集Go结构时,是否可以释放非托管资源?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

收集Go结构时,是否可以释放非托管资源?

您可以使用runtime.SetFinalizer。当对象超出范围时,这使您可以运行清除功能。它不能保证运行。但是,释放内存时,这并不重要。重要的是,对于一个长时间运行的过程,很可能会检查垃圾。

以下是一些文档摘录(删除了整个段落):

SetFinalizer将与x关联的终结器设置为f。当垃圾收集器找到带有关联的终结器的无法访问的块时,它将清除该关联并在单独的goroutine中运行f(x)。这使得x再次可访问,但是现在没有关联的终结器。假设没有再次调用SetFinalizer,则下次垃圾回收器看到x不可达时,它将释放x。

x的终结器计划在x变得不可访问之后的任意时间运行。无法保证终结器会在程序退出之前运行,因此通常它们仅对在长时间运行的程序期间释放与对象关联的非内存资源有用。例如,当程序在不调用Close的情况下丢弃os.File时,os.File对象可以使用终结器关闭关联的操作系统文件描述符,但是依靠终结器来刷新内存I将是一个错误。
/ O缓冲区,例如bufio.Writer,因为该缓冲区不会在程序退出时刷新。

单个goroutine按顺序运行程序的所有终结器。如果终结器必须运行很长时间,则应通过启动新的goroutine来完成。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417791.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号