目次
回复内容:
ホームページ バックエンド開発 PHPチュートリアル php中实例化的对象什么时候会释放

php中实例化的对象什么时候会释放

Jun 06, 2016 pm 08:41 PM
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楼提到的

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

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

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

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

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

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

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

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

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles