java - 实例变量会持续多长时间?在 Rails 中?在 java ?在 PHP 中?

标签 java php ruby-on-rails

如果我实例化一个类并在 Rails Controller 或模型使用的 Ruby 模块中设置实例变量,该实例变量会持续多长时间?变量是否需要显式存储在 session 中才能在请求之间保留?

Rails 在这方面与 Java 或 PHP 相比如何?

最佳答案

在 PHP 中,这取决于什么版本。考虑到 PHP4 刚刚发布,我只讨论 5.2 和 5.3:是的,变量确实需要存储在 session 或其他持久机制(memcached、数据库、文件等)中才能跨请求持久保存。原生 PHP 变量可以持续的最长时间是当前请求的长度(以及所有内容都被清理干净的末尾)。

在 PHP 的两个版本中:

只要有变量引用实例变量,它们就会持续存在。 PHP 在内部存储每个对象的引用计数。当变量超出范围时,PHP 会减少引用计数并检查是否为 0。如果为 0,则会清理实例并销毁对象。

在 PHP 5.0、5.1 和 5.2 中:

变量清理很幼稚。这意味着,如果您有循环引用(A 类持有 B 类的实例,反之亦然),则除非释放其中一个引用,否则该对象将永远不会被清理。

在 PHP 5.3 中:

出于循环引用的确切原因,PHP 引入了一个相当智能的垃圾收集器。它可以关闭,也可以手动激活。只要其根计数已满或引用计数减少到非零数字,它就会运行。

关于java - 实例变量会持续多长时间?在 Rails 中?在 java ?在 PHP 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4747578/

相关文章:

java - Sierra Chart DTC Java 套接字连接空终止符

java - 如何调用以 Graphics g 作为参数的方法?

php - WAMP phpMyAdmin 打不开

php - 如何使用php将数据插入tally?

ruby-on-rails - ActionCable Websocket 升级和 404 错误

java - jdave-unfinalizer Java 7 栈图框架

java - Frida hook 重写匿名类的方法?

php - Yii,单一关系中的双重标准

javascript - 使用 JavaScript 将日期时间类型发布到数据库

php - Ruby on Rails 的 FirePHP 等价物