php中实例化的对象什么时候会释放
有时候用php在处理比较大的数据的时候,会报内存不够的错误。
想到实例化可能会占据内存,unset掉之后并没有改善多少,那么php中实例化的对象会在什么时候被释放?
回复内容:
有时候用php在处理比较大的数据的时候,会报内存不够的错误。
想到实例化可能会占据内存,unset掉之后并没有改善多少,那么php中实例化的对象会在什么时候被释放?
php是有垃圾回收(Garbage Collection)机制的。具体可以查阅文档:http://php.net/manual/zh/features.gc.php
垃圾回收机制就是最早在Lisp中被提出,关于更多垃圾回收的信息.
参见维基百科:http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)
这种时候你就应该考虑你处理数据的算法和机制了, 你说实例化会占用内存, 那你是不是在这个大数据里经常实例化对象呢, 既然是大数据, 你还在里面一直实例化,好像就不太合适了。
另外, unset销毁的只是该对象, 并没有销毁该对象在内存中的占用, 这里引用一句话:
<code>当给一个变量赋值(或者相类似的操作),内存会开辟一个空间存储,这时候会产生两个重要的概念,一个是“内存的地址”,一个是“地址内的内容”。unset打断了变量与地址间的联系。而php会自动检测内存地址里的数据是否完全没有跟其它变量产生联系,在确定没有的情况下会回收内存。所以要回收内存,那就要把所有的联系打断。 </code>
参考文章
unset函数内存分配和销毁问题探秘
php unset对象实例
php原来是通过引用计数器来实现内存回收,也就是是多个php变量可能会引用同一份内存,这种情况unset掉其中一个是不会释放内存的;
例如:$a = 1;
$b = $a;
unset($a);
另外,离开了变量的作用域后变量所占用的内存就会被自动清理(不包含静态变量),如函数或方法内的局部变量,对这些局部变量进行unset在函数外来看内存也是没有减少的。
最后,引用计数有个缺陷,就是当循环引用出现时,计数器没法清0,内存占用会持续到页面访问结束。对于这个问题PHP5.3中增加了垃圾回收机制。嗯,就是1楼提到的

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー
