在 ruby 當中,經常會看到 : 的符號,代表 symbol
跟一般 string 的差異在於
- 同樣的 string,會產生不同的 記憶體
- 同樣的 symbol,一樣的記憶體
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Garbage Collection
在 ruby 2.2 之前,symbol 所佔用的記憶體沒辦法被自動回收,要釋放就必須重啟動程式,因此會造成 memory leak 的問題
但在 2.2 之後,Symbol GC(Garbage Collection) ,那些動態用 to_sym 或 intern 長出來的 Symbol 就可以跟一般物件一樣被回收了。
ruby2.1
1 2 3 4 5 6 7 8 9 |
|
ruby 2.2
1 2 3 4 5 6 7 8 9 |
|
參考文件:
Ruby 語法放大鏡之「有的變數變前面有一個冒號(例如 :name),是什麼意思?」
Symbol GC in Ruby 2.2
[译] 在 Ruby 2.2 中的 Symbol GC
Ruby 2.2 的 可回收 symbol
升级 Ruby 2.1 以及 GC 调整
Ruby 的 GC 不释放内存给回系统的?
画说 Ruby 与 Python 垃圾回收