跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
垃圾回收 (计算机科学)
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= 垃圾回收 (计算机科学) = '''垃圾回收'''(Garbage Collection,简称GC)是计算机科学中一种自动内存管理机制,用于自动回收程序不再使用的内存空间。它通过追踪和识别不再被程序引用的对象,释放这些对象占用的内存,从而减轻开发者的内存管理负担。 == 工作原理 == 垃圾回收器通常通过以下步骤工作: 1. '''标记阶段''':从根对象(如全局变量、栈中的变量等)出发,标记所有可达对象 2. '''清除阶段''':回收未被标记的对象占用的内存空间 3. '''整理阶段'''(可选):压缩内存以减少碎片 === 常见算法 === * '''标记-清除算法'''(Mark-Sweep) * '''引用计数'''(Reference Counting) * '''分代收集'''(Generational Collection) * '''复制算法'''(Copying) == 在Go语言中的实现 == Go语言使用并发的、三色的标记-清除垃圾回收器。以下示例展示了Go语言中垃圾回收的自动内存管理: <syntaxhighlight lang="go"> package main import "fmt" func createLargeSlice() []int { return make([]int, 1000000) // 分配大内存块 } func main() { for i := 0; i < 10; i++ { slice := createLargeSlice() _ = slice // 使用后不再引用 // Go的垃圾回收器会自动回收不再使用的内存 fmt.Printf("Iteration %d completed\n", i) } } </syntaxhighlight> == 优点与缺点 == === 优点 === * 防止[[内存泄漏]] * 减少[[悬空指针]]问题 * 简化开发者的内存管理工作 === 缺点 === * 可能引起程序暂停(Stop-The-World) * 增加CPU开销 * 内存使用可能不如手动管理高效 == 性能考量 == 垃圾回收器的性能通常通过以下指标衡量: * 吞吐量(Throughput) * 暂停时间(Pause Time) * 内存效率(Memory Efficiency) 在Go语言中,可以通过设置环境变量调整GC行为: <syntaxhighlight lang="bash"> GOGC=50 # 设置垃圾回收的百分比阈值 </syntaxhighlight> == 实际应用案例 == 垃圾回收广泛应用于: * [[Java虚拟机]](JVM) * [[.NET]] CLR * [[Python]]解释器 * [[JavaScript]]引擎 * [[Go]]语言运行时 == 与其他内存管理技术的比较 == {| class="wikitable" |- ! 技术 !! 优点 !! 缺点 |- | '''垃圾回收''' || 自动管理,安全性高 || 运行时开销 |- | '''手动内存管理''' || 高效,可控 || 容易出错 |- | '''引用计数''' || 实时回收 || 循环引用问题 |} == 参见 == * [[内存管理]] * [[编程语言实现]] * [[运行时系统]] [[Category:计算机内存]] [[Category:编程语言特性]] [[Category:软件工程]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)