godot-start/doc/demo02_base/base2.md

35 lines
1.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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