为什么栈不需要垃圾回收,堆需要垃圾回收?一文详解
目录一.栈内存 你的办公桌用完即走二.堆内存 公共大仓库需要管理员核心区别在哪里总结大白话一.栈内存 你的办公桌用完即走想象你在办公桌上工作动作你开始处理一个任务比如调用一个方法你会从文件架上拿个文件夹分配内存把草稿纸放上去写写画画存变量。结束任务做完了方法结束你直接把整个文件夹合上扔回文件架或者把草稿纸直接扔进碎纸机。关键点这个动作是瞬间完成的。你不需要专门派一个人垃圾回收器来检查这张草稿纸还有没有用。因为任务结束了这张桌子上的东西统统作废。这就是栈方法一结束这块内存直接“清零”或“弹出”根本不需要去判断“谁还在用它”因为肯定没人用了。二.堆内存 公共大仓库需要管理员想象公司有一个巨大的公共仓库动作大家不同的任务、方法都往里面搬东西创建对象比如搬进一台冰箱。结束你的任务做完了你走出了仓库。但是那台冰箱还在仓库里。问题别的任务可能还需要这台冰箱。也可能别的任务也用完了没人要了。关键点因为你走出仓库时不能直接把冰箱砸了万一别人还要用呢。所以必须派一个保洁阿姨垃圾回收器 GC定期进仓库巡逻。阿姨得拿着清单一个个问“这台冰箱还有人要用吗那台电视还有人用吗”只有确认所有人都不要了阿姨才会把它搬走卖掉回收内存。核心区别在哪里你之前的困惑可能在于“不都是自动的吗”栈的自动是“到期自动销毁”。就像看电影电影散场了方法结束这一批观众内存必须全部走人不需要检票员一个个问“你还要看吗”。堆的自动是“没人要了才销毁”。就像图书馆的书你不能因为张三看完了就把书扔了因为李四可能明天要借。必须等所有人都说“我看完了”这本书才能被处理掉。总结“栈不需要垃圾回收”的意思是栈内存太“短命”且“规矩”了它活不过它所属的那个方法。方法一死栈内存立马跟着死死得明明白白根本不需要垃圾回收器GC费心去判断它是不是“垃圾”。而堆内存活得“长”且“乱”不知道谁在用所以才需要 GC 这个“管家”来专门伺候。大白话栈一个方法执行完立刻就弹出出栈了速度很快说白了你就算想回收人家但是人家执行完弹出的速度比你回收的还快所以就不需要垃圾回收。堆比较乱、比较大需要管家定时清理。综上故栈不需要垃圾回收而堆需要垃圾回收以上就是本篇文章的全部内容喜欢的话可以留个免费的关注呦~~~
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2561284.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!