性能优化:

1.业务代码:特定场景的具体问题具体分析
2.SDK
3.基础库
4.语言运行时:解决通用问题 Tradeoffs
5.OS

自动内存管理Garbage collector(GC)

管理的是动态内存:malloc()
所以管理动态内存就是垃圾回收
可以解决:double-free use-after-free问题
在CVE漏洞平台上能看到 double-free 和use-after-free是很多的

任务:
1.新对象分配空间
2.找到存活对象
3.回收死亡对象

名词:
Mutator:业务线程,分配新对象
Collector:GC线程,找到存活的,回收死亡的
Serial GC:只有一个collector
Parallel GC:多个collector
Concurrent GC:能既创建 又回收(同时)

评价GC算法:
安全性:不能回收存活的对象
吞吐率:花在GC上的时间
暂停时间:业务是否感知
内存开销:GC元数据开销

追踪垃圾回收:标记根对象-找到可达对象-清理不可达对象
分代GC:most objects die young 每个对象都有年龄 分区
在这里插入图片描述young generation的对象 存活的很少 可以copying collection
old generation的对象 趋向于一直活着 复制反而开销比较大 用mark-sweep collection

也可以引用计数:大于零就存活(这个就是内存管理和程序执行中了)类似于C++的智能指针。缺点是:原子操作开销大,循环引用,内存开销。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部