老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

在PHP項目中對象相互引用出現內存溢出如何解決-創新互聯

本篇文章給大家分享的是有關在PHP項目中對象相互引用出現內存溢出如何解決,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

為霍城等地區用戶提供了全套網頁設計制作服務,及霍城網站建設行業解決方案。主營業務為做網站、成都網站制作、霍城網站設計,以傳統方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業、用心的態度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

通常來說使用腳本語言較大的好處之一就是可利用其擁有的自動垃圾回收機制來釋放內存。你不需要在使用完變量后做任何釋放內存的處理,因為這些PHP會幫你完成。
當然,我們可以按自己的意愿調用 unset() 函數來釋放內存,但通常不需要這么做。
不過在PHP里,至少有一種情況內存不會得到自動釋放,即便是手動調用 unset()。詳情可考PHP官網關于內存泄露的分析:/tupian/20230522/bug.php unset()不會釋放在子對象中引用父對象的內存(即便父對象被垃圾回收,也不行)。

是不是有些糊涂了?我們來看下面的這段代碼:


bar = new Bar($this);
 }
}
class Bar {
 function __construct($foo = null){
 $this->foo = $foo;
 }
}
while (true) {
 $foo = new Foo();
 unset($foo);
 echo number_format(memory_get_usage()) . " ";
}
?>

運行這段代碼,你會看到內存使用率越來越高越來越高,直到用光光。


...33,551,61633,551,97633,552,33633,552,696PHP Fatal error: Allowed memory size of 33554432 bytes exhausted(tried to allocate 16 bytes) in memleak.php on line 17

對大部分PHP程序員來講這種情況不算是什么問題。可如果你在一個長期運行的代碼中使用到了一大堆相互引用的對象,尤其是在對象相對較大的情況下,內存會迅速地消耗殆盡。

Userland解決方案

雖然有些乏味、不優雅,但之前提到的 bugs.php.net 鏈接中提供了一個解決方案。
這個方案在釋放對象前使用一個 destructor 方法以達到目的。Destructor 方法可將所有內部的父對象引用全部清除,也就是說可以將這部分本來會溢出的內存釋放掉。

以下是“修復后”的代碼:


bar = new Bar($this);
 }
 function __destruct(){
 unset($this->bar);
 }
}
class Bar {
 function __construct($foo = null){
 $this->foo = $foo;
 }
}
while (true) {
 $foo = new Foo();
 $foo->__destruct();
 unset($foo);
 echo number_format(memory_get_usage()) . " ";
}
?>

注意那個新增的Foo::__destruct()方法,以及在釋放對象前對 $foo->__destruct() 的調用。現在這段代碼解決了內存使用率一直增加的問題,這么一來,代碼就可以很好的工作了。

PHP內核解決方案

為什么會有內存溢出的發生?我對PHP內核方面的研究并不精通,但可以確定的是此問題與引用計數有關系。
在 $bar 中引用 $foo 的引用計數不會因為父對象 $foo 被釋放而遞減,這時PHP認為你仍需要 $foo 對象,也就不會釋放這部分的內存。原理大致如此。

通俗的來說,大體意思是:一個引用計數沒有遞減,所以一些內存永遠得不到釋放。
此外在前面提到的 bugs.php.net 鏈接中指出了修改垃圾回收的過程將會犧牲極大的性能,需要讀者對此注意。

與其改變垃圾回收的過程,為什么不用 unset() 對內部對象做釋放的工作呢?(或者在釋放對象的時候調用 __destruct()?)
也許PHP內核開發者可以在此或其他地方,對這種垃圾回收處理機制做出修改。

以上就是在PHP項目中對象相互引用出現內存溢出如何解決,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創新互聯行業資訊頻道。


網站題目:在PHP項目中對象相互引用出現內存溢出如何解決-創新互聯
轉載來于:http://www.xueling.net.cn/article/coiidi.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 国产精品乱码久久久久 | 久久精品无码中文字幕老司机 | a级毛片高清免费播放 | 综合自拍偷拍 | 国产日韩精品一区二区在线播放 | 国内精品久久久久久久影视蜜臀 | 少妇扒开毛茸茸的b自慰 | 999久久久久久久 | 2018久久| 国产亚洲精品久久飘花 | 真实国产老熟女无套中出 | 免费看黑人男阳茎进女阳道视频 | 国产香蕉色网视频 | 最新国产精品久久精品 | 99久久国产综合精品女不卡 | 两个人在线观看WWW视频 | 亚洲国产欧美国产综合一区 | 欧美精品观看 | 久久一区二区三区免费 | 超碰97自拍| av不卡国产在线观看 | 国产97精品一区二区在线观看 | 国产99久久久精品视频 | 一级黄色免费观看视频 | 久久精品免费 | 中文字幕免费av | 精品中文字幕在线观看 | 国产精品wwwww | 制服丝袜国产AV无码 | 最近高清日本免费 | 免费国产精品一区二区三区 | 成人精品一区二区三区校园激情 | 丰满少妇好紧多水视频 | 亚洲精品国产成人精品 | 亚洲成av人片在线观看无码 | 中文字幕视频在线免费 | 日本一道本线一区免费 | 伊人久久大香伊蕉在人线观看热v | 欧美精品videos另类 | 日韩人妻无码精品系列专区 | 亚洲精品国产一区二区三区四区在线 |