最近我一直在使用Rails控制檯,它使我好奇。像鋼軌如何使用內存?
>> app.get("/")
=> 200
>> app.html_document.to_s
讓我好奇Rails如何在內存中工作。任何人都可以解釋那裏發生了什麼?哪些對象在被銷燬時何時被實例化?
最近我一直在使用Rails控制檯,它使我好奇。像鋼軌如何使用內存?
>> app.get("/")
=> 200
>> app.html_document.to_s
讓我好奇Rails如何在內存中工作。任何人都可以解釋那裏發生了什麼?哪些對象在被銷燬時何時被實例化?
經過一段時間和大量的閱讀,這裏是對我自己的問題的最低限度的答案,因爲這仍然是一個穩定的滴流人羣。請記住,我對Rails仍然很陌生,這僅僅是我在大約兩個月的工作後對它的理解。
當您的環境設置受到實例化時,由於類加載(除其他外)在開發與生產中的處理方式有很大不同。最基本的要素可以從閱讀註釋文件中的配置/環境中收集/
# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
# since you don't have to restart the webserver when you make code changes.
和
# The production environment is meant for finished, "live" apps.
# Code is not reloaded between requests
從,一般流在所有典型的MVC圖所示
除了(調度>控制器>模型>控制器>視圖),雖然這是正確的,但還有許多其他類實例化。一份詳盡的清單就是這樣,令人筋疲力盡。對於那些對細節感興趣的人(至少是所有細節),但不知道該去哪裏,奧比費爾南德斯的書「鐵軌之路」是非常有價值的,並且對此進行了相當廣泛的處理。
這個問題有點太複雜,無法回答。可能會有很多事情要做,這取決於應用程序的複雜程度。
Ruby爲需要在運行中創建的對象分配內存。當對象超出作用域時,它們被標記爲未使用,並且垃圾收集器釋放內存。
但是,類變量和全局變量等可以防止對象脫離範圍。
我不會擔心它太多。如果您在生產應用程序中遇到內存問題,只需切換到Ruby Enterprise,其中許多將會奇蹟般地消失。 :)
在一個更一般的說明,_why幾年前寫了一個excellent piece on Ruby memory management /垃圾回收器。