为什么没有编程语言的内存管理是手动管理与自动垃圾
1个回答
2018-01-29 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517193
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向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 还真的很难用一个清晰的接口呈现给程序员,所以还是作为一个黑箱好了。
至于其它语言,我并不认为有完美的解决方案。主要的考虑是 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-12-02 广告
2024-12-02 广告
计算机配料防错系统是深圳市中宇科技开发有限公司针对生产流程中的配料环节,自主研发的一项重要技术。该系统利用先进的计算机技术和算法,对配料过程进行实时监控和精确控制,有效避免了人为错误和材料浪费。通过智能识别和预警机制,系统能够及时发现并纠正...
点击进入详情页
本回答由中宇科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询