代码之家  ›  专栏  ›  技术社区  ›  mikewilliamson

Rails如何使用内存?

  •  0
  • mikewilliamson  · 技术社区  · 16 年前

    最近我经常使用Rails控制台,这让我很好奇。类似命令

    >> app.get("/")
    => 200
    >> app.html_document.to_s
    

    让我好奇Rails在内存中是如何工作的。有人能解释一下里面发生了什么吗?什么对象在何时和何时被销毁?

    3 回复  |  直到 15 年前
        1
  •  0
  •   Steven Soroka    16 年前

    这个问题有点复杂,回答不了。根据应用程序的复杂程度,可能会有很多事情发生。

    Ruby为需要即时创建的对象分配内存。当对象退出作用域时,它们被标记为未使用,垃圾收集器将释放内存。

    但是,类变量和全局变量等可以防止对象从作用域中退出。

    我不会太担心的。如果您在生产应用程序中遇到内存问题,只需切换到RubyEnterprise,其中许多问题就会神奇地消失。:)

        2
  •  0
  •   Jonas Elfström    16 年前

    一般来说,为什么要写 excellent piece on Ruby memory management /几年前的垃圾收集器。

        3
  •  0
  •   mikewilliamson    15 年前

    经过一段时间和大量的阅读,这里是我自己的问题的一个最小的答案,因为这仍然是由一个稳定的涓涓细流的人看到。请记住,我对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图(Dispatcher>Controller>Model>Controller>View)中都说明了一般流程,尽管如此,沿途还会实例化大量其他类。一份详尽的清单正是如此,令人筋疲力尽。

    对于那些对细节感兴趣(至少是所有重要的细节)但不确定该去哪里的人来说,欧比·费尔南德斯的《铁轨之路》一书非常值得一读,并对此进行了相当广泛的讨论。