godot-start/doc/demo02_base/base2.md

35 lines
1.4 KiB
Markdown
Raw Normal View History

2022-01-02 10:47:19 +00:00
# 1. 内存管理free
- godot中的对象分为两种
2023-11-18 04:26:10 +00:00
- 引用计数对象继承于RefCounted当没有引用时会被自动回收
- 非引用计数对象没有继承于RefCounted自能自己手动回收,free或queue_free
2022-01-02 10:47:19 +00:00
2022-01-09 07:03:09 +00:00
- 在godot中移除一个节点并不会从节点中删除必须手动调用free或queue_free
2022-01-02 10:47:19 +00:00
![Image text](image/gc.JPG)
# 2. 垃圾回收的缺点
![Image text](image/gc1.png)
![Image text](image/gc2.png)
![Image text](image/gc3.png)
2022-01-09 07:03:09 +00:00
- GdScript没有垃圾回收虽然有着内存泄露的风险但是也保证了性能
2023-11-18 04:26:10 +00:00
- 类似于C++的智能指针
2022-01-09 07:03:09 +00:00
2022-01-09 10:54:47 +00:00
# 3. 引用计数算法
2022-01-02 10:47:19 +00:00
2022-01-09 10:53:33 +00:00
- 对于创建的每一个对象都有一个与之关联的计数器,这个计数器记录着该对象被使用的次数
- 可以立即回收垃圾。因为每个对象在被引用次数为0的时候是立即就可以知道的。
- 没有暂停时间。这个很容易理解对象的回收根本不需要另外的GC线程专门去做业务线程自己就搞定了。
- 不需要stop the world当然在多线程的情况下必要的同步和互斥操作还是需要的。
- 一个致命缺陷是循环引用,就是, objA引用了objBobjB也引用了objA。这种情况下这两个对象是不能被回收的。
![Image text](image/cycle.JPG)
2022-01-02 10:47:19 +00:00
- 可以使用unreference去释放引用计数的对象
2022-01-03 08:59:00 +00:00
- 引用计数既保留了性能,也保证了更加高效的性能
![Image text](image/太极.png)