为什么没有编程语言的内存管理是手动管理与自动垃圾

 我来答
huanglenzhi
2018-01-29 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517181
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
C/C++ 完全靠手动这个容易解释 —— 总有对性能和 predictability 需求极高的场合。
至于其它语言,我并不认为有完美的解决方案。主要的考虑是 latency 和 overhead。一次回收大量垃圾,自然总 overhead 最小,但是 latency 就高了。一次回收一小部分,latency 比较低,但是总的 overhead 比较大。这中间的权衡需要在 runtime 收集信息来总体裁断,编写代码的时候静态考虑的效果并不好。所以现代 GC 的原则就是说:我知道所有信息,我有启发式的算法,可以保证总体效率。不希望让程序员干涉。
而且,有 GC 的语言,数据的生命周期并不好判断:一是语言会避免像 C/C++ 那样做 value copy,二是经常用在 undeterministic 的场合(UI、event-driven)。这种时候,让 GC 本身根据 global knowledge 来做分代,可能比程序员自己分析要好。
Java 规范里规定 System.gc( ) 只是一个 hint,这个我觉得多少有些太自负了。Lua 的 collectgarbage 是可以确定的调用 GC 的。但是也只是选择 GC 调用的时机,因为 GC 拥有整体内存的 knowledge,这个 global knowledge 还真的很难用一个清晰的接口呈现给程序员,所以还是作为一个黑箱好了。
今至电子科技有限公司
2024-08-13 广告
服务器虚拟化是一种将物理服务器资源(如CPU、内存、存储)抽象并分割成多个独立虚拟服务器的技术。通过虚拟化软件,如VMware、Hyper-V等,可以在单一物理服务器上创建多个虚拟机,每个虚拟机都能运行独立的操作系统和应用程序,从而提高资源... 点击进入详情页
本回答由今至电子科技有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式