pull/2/head
jaysunxiao 2022-01-09 18:53:33 +08:00
parent a8186c351a
commit b83ca2aca8
3 changed files with 13 additions and 5 deletions

View File

@ -18,6 +18,15 @@
# 3. 引用计数 # 3. 引用计数
- 对于创建的每一个对象都有一个与之关联的计数器,这个计数器记录着该对象被使用的次数
- 可以立即回收垃圾。因为每个对象在被引用次数为0的时候是立即就可以知道的。
- 没有暂停时间。这个很容易理解对象的回收根本不需要另外的GC线程专门去做业务线程自己就搞定了。
- 不需要stop the world当然在多线程的情况下必要的同步和互斥操作还是需要的。
- 一个致命缺陷是循环引用,就是, objA引用了objBobjB也引用了objA。这种情况下这两个对象是不能被回收的。
![Image text](image/cycle.JPG)
- 可以使用unreference去释放引用计数的对象 - 可以使用unreference去释放引用计数的对象
- 引用计数既保留了性能,也保证了更加高效的性能 - 引用计数既保留了性能,也保证了更加高效的性能

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -5,8 +5,8 @@ const B = preload("res://script/demo02_base/B.gd")
func _ready(): func _ready():
#referenceTest() #referenceTest()
referenceCycleTest() #referenceCycleTest()
#referenceUnreference1Test() referenceUnreference1Test()
#referenceUnreference2Test() #referenceUnreference2Test()
pass pass
@ -28,12 +28,11 @@ func referenceUnreference1Test():
a.b = b a.b = b
b.a = a b.a = a
a.unreference() a.unreference()
b.unreference()
func referenceUnreference2Test(): func referenceUnreference2Test():
var a = A.new() var a = A.new()
var b = B.new() var b = B.new()
a.b = b a.b = b
b.a = a b.a = a
a.b.unreference() a.unreference()
b.a.unreference() b.unreference()