专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

是手动管理与自动垃圾回收相结合的_PHP基础

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/5 15:09:54       共计:3608 浏览

是手动管理与自动垃圾回收相结合的?

Rust和Objective-C内存管理

据虫虫所知目前有两种语言可以做到这种权衡,一种是Rust,一种是OC。但基本上都不是主流。

rust通过所以权和生命周期方式动态管理内存,保证运行时100%内存安全,需要手动时候用unsafe强制标记。

Objective-C中有mrc和arc两种内存管理机制:MRC(手动计数,MannulReference Counting)和 ARC(自动计数Automatic Reference Counting),分别提供对内存的手动和自动管理,来满足不同的需求。

主流的内存管理和GC垃圾回收各种现代语言都有一套自己的gc处理办法,虽然各有各的招,但是基本上是基于三种基本方法:引用计数、复制收集和标记清除。下面一一介绍下。引用计数

这是一种比较方便,有效的gc管理方法。现代绝大多数语言都是基于这种方法,包括不限于python、php、perl、ruby和js都是。

引用计数的基本原理就是对程序中所有对象(比如变量等)有个全局表记录其被引用的次数,当对其引用释放时候计数就减少,直到计数为零,则其会被释放。

引用计数优点实现简单,可即时回收垃圾。缺点是容易形成循环引用,导致永远释放不了,所以现代语言gc主要是基于引用计数,然后引入一些改进算法解决循环引用的问题。

复制收集

这种算法是把内存分两块,一块正常使用,当需要gc时候,将第一块上还在使用的对象复制到另一块,然后将第一块内存全部释放,这种方法防止了对象存活检查的遍历,可提高效率。

标记——清除

这是出现最早应用最广的gc方法,也可以说gc普遍原理就是这种方法。标记清楚发有两个阶段,标记阶段需要标记回收的对象;回收阶段有gc统一回收。

这种方式问题,效率很差还会产生大量内存碎片。

实际上java的gc综合了2,3方法还做了其他大量的改进,可以说java gc是最先进的gc方法。但是由于底层jvm限制,不能用引用计数的方法,所以还是有一些问题的。

业界普遍看法也是,任何一种GC算法用引用计数和跟踪回收结合的话才是最有效率的,最实用的。

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:32岁的程序员_PHP基础 | ·下一条:eclipse中大小于符号怎么表示_PHP基础

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有