D语言中的垃圾收集机制

垃圾收集、垃圾收集算法、垃圾收集器 文章目录1、垃圾收集Garbage Collection(GC)1.1 需要GC的内存区域1.2 GC的对象1.3 什么时候触发GC1.4 GC做了什么事2、垃圾收集算法2.1 标记-清除(Mark-Sweep)算法2.2 标记-压缩(Mark-Compact)算法2.3 复制(Copying)算法2.4 分代收集(Generational Collection)算法3、垃圾收集器3.1 Serial收集器、Serial Old收集器3.2 ParNew收集器3.3 Parallel收集器3.3.1 Par 阅读详情

垃圾收集

D 是一种全面采用垃圾收集的语言。这意味着它从来不用释放内存。只需要按需分配,然后由垃圾收集程序周期性的将所有未使用的内存返回给可用内存池。

C 和 C++ 程序员习惯于显式的管理内存分配和释放,很可能会怀疑垃圾收集的好处和功效。对一开始就采用垃圾收集设计的新项目和用垃圾收集改良的现有项目的经验表明:

  • 采用垃圾收集的程序更快。这有些违反直觉,但是其原理有:
    • 引用计数是解决显式内存分配问题的常用解决方案。实现赋值时递增和递减操作的代码通常是程序缓慢的原因之一。将其隐藏在智能指针类之后并不能提高速度。 (无论如何,引用计数也不是全面的解决方案,因为循环引用从不会被删除。)
    • 析构函数用来释放对象获得的资源。对于大多数类来说,这个资源就是内存。采用垃圾收集,大多数析构函数都可以完全抛弃。
    • 当对象在堆栈上分配时,那些负责释放内存的析构函数就变得十分重要。对于这些函数来说,必须确立一种机制以使异常发生时,每一个函数帧中的析构函数都会被调用以释放对象持有的内存。如果析构函数变得不相关,就没有设置特殊的堆栈帧用于处理异常,这样运行也会更快。
    • 内存管理代码总量会变少。程序越大,它在cache中的部分的越少;它的调页越多,它运行的越慢。
    • 垃圾收集只会在内存变得紧张时才会运行。当内存尚且宽裕时,程序将全速运行,不会在释放内存上花费任何时间。
    • 相对于过去的缓慢的垃圾收集程序,现代的垃圾收集程序要先进得多。分代,复制收集程序在很大程度上克服了早期的标记&清除算法的低效。
    • 现代垃圾收集程序进行堆紧缩。堆紧缩将减少程序引用的页的数量,这意味着内存访问命中率将更高,交换将更少。
    • 采用垃圾收集的程序不会因为内存泄漏的累积而崩溃。
  • 垃圾收集程序回收不被使用的内存,因此不会有“内存泄露”问题。内存泄露会使长期运行的应用程序逐渐耗尽内存直至使系统崩溃。采用 GC 的程序拥有更长期的稳定性。
  • 采用垃圾收集的程序 有更少
allegro 约束管理Constraint Manager(一) 介绍Cadence allegro 约束管理器CM的使用方法。 阅读详情

相关推荐

国密SKF库数字签名全解析:SM2签名与验证的详细实现

本文详细解析了基于国密SKF库实现SM2数字签名与验证的全过程。内容涵盖SKF库环境搭建、设备初始化、PIN码验证、SM2签名生成以及纯软件与SKF库两种验证方式的详细实现,为开发者提供了一份实用的国密算法开发指南。

weixin_29303701的博客 323

YOLOv8实例分割实战:从LabelMe标注到模型训练全流程(附完整代码)

本文详细介绍了YOLOv8实例分割的完整实战流程,涵盖从使用LabelMe进行数据标注、格式转换,到构建数据集、配置参数并完成模型训练的全过程。文章提供了详尽的代码示例和常见问题解决方案,旨在帮助开发者高效掌握YOLOv8实例分割技术,快速应用于实际项目。

java5的博客 814

OK3588-C开发板Forlinx Desktop系统烧录与多媒体功能实战

本文详细介绍了OK3588-C开发板Forlinx Desktop系统的烧录步骤与多媒体功能实战。从硬件准备到软件工具配置,逐步解析RKDevTool烧录技巧,并深入测试摄像头、视频编解码及音频功能,帮助开发者快速掌握RK3588芯片的强大性能与Ubuntu系统的优化应用。

weixin_29190169的博客 417

泰山派rk3566 audio音频基础介绍

本文介绍了嵌入式系统中音频处理的基础知识,重点围绕RK3566平台的音频子系统展开。文章首先解释了音频信号从模拟到数字的转换过程,包括采样率、位深和声道等核心概念。随后详细分析了嵌入式音频开发中的关键接口:I2C用于控制音频编解码器,I2S作为专用音频数据传输总线,以及PCM作为原始音频格式和ALSA设备抽象的双重含义。通过对这些基础概念和接口的解析,为在RK3566平台上进行音频驱动开发和应用调试提供了理论基础。

qq_37077309的博客 294

r3live 使用前提 雷达-相机外参标定 livox_camera_lidar_calibration

港科大livox_camera_calib虽然操作方便,但是使用mid360雷达会有视角问题(投影三维点到相机),尝试了很多场景,标定效果都不理想(推荐场景是楼梯间),看来港大的更适合avia之类窄角度的雷达。如果标定效果不好的话,就使用 getExt2节点,getExt1节点只优化外参,而getExt2节点在计算的时候会将一开始计算的内参作为初值和外参一起优化。一般使用getExt1节点即可,如果在外参初值验证过,并且异常值已经剔除后,优化还是有较大的残差,那么可以使用getExt2试一试。

z1872385的博客 2399

倒立摆的PLC控制(模型分析+ SCL源代码)

首先简单介绍下倒立摆模型,下面这幅图是MATLAB网站上的倒立摆模型,下面我们利用牛顿第二运动定律建立摆杆的运动方程。

RXXW_Dor的博客 3333

【SECS】初识SECS协议

项目标题的第一位和第二位告诉下面有多少字节表示项目的长度。而项目的长度是指项目标题后面的字节数,这里第一个字节就是项目标题。1个字节可以表示的最大长度是0-255,所以只要项目标题后面的字节数小于等于254,都是0x01。

weixin_48618536的博客 1643

手游功耗优化:从猜想到硬核实测

功耗本质是“硬件在吃电”,要看电流/功率曲线,而不是只看帧率和温度;定量 = 有数字、有曲线、有对比能说“降了 15%”、“峰值从 7W 降到 5.5W”,而不是“我感觉凉快点”;工具方面:大厂会用外接功率仪 + 手机/芯片厂内部平台;平时也会用 Android/iOS/引擎自带的工具做趋势分析;流程上:选典型机型和场景 → 跑脚本采集 → 对齐 Profiler 数据 → 分析 CPU/GPU/网络谁在吃电;再通过版本对比、画质/帧率组合测试,指导配置和优化。这是一个。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 177

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: D语言中的错误处理
下一篇: D语言中的内存管理技术
uframer
博客等级 码龄22年 16粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值