本篇文章給大家分享關于PHP垃圾回收機制的高級面試題,并帶大家深入了解一下PHP垃圾回收機制。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。
ps:本篇內容包括精選面試題與知識篇。
PHP面試題關于PHP的垃圾回收機制,PHP的垃圾回收機制引用計數 (reference counting) GC 機制,PHP可以自動進行內存管理,清除不需要的對象,PHP面試題分享PHP關于垃圾回收機制的面試題:
推薦學習:《PHP視頻教程》
面試題篇
介紹一下PHP的垃圾回收機制
PHP使用了引用計數(reference counting)GC機制,同時使用根緩沖區機制,當php發現有存在循環引用的zval時,就會把其投入到根緩沖區,當根緩沖區達到配置文件中的指定數量后,就會進行垃圾回收,以此解決循環引用導致的內存泄漏問題。
- 1. 如果引用計數減少到零,所在變量容器將被清除(free),不屬于垃圾;
- 2. 如果一個zval的引用計數減少后還大于0,那么它會進入垃圾周期。其次,在一個垃圾周期中,通過檢查引用計數是否減1,并且檢查哪些變量容器的引用次數是零,來發現哪部分是垃圾。
每個對象都內含一個引用計數器refcount,每個reference連接到對象,計數器加1。當reference離開生存空間或被設為 NULL,計數器減1。當某個對象的引用計數器為零時,PHP知道你將不再需要使用這個對象,釋放其所占的內存空間。
下列關于PHP垃圾回收的說法,錯誤的是?
A、開啟/關閉垃圾回收機制可以通過修改php配置實現
B、可以在程序中使用gc_enable() 和 gc_disable()開啟和關閉。
C、PHP中的垃圾回收機制,會大幅度提升系統性能。
D、開啟垃圾回收機制后,針對內存泄露的情況,可以節省大量的內存空間,但是由于垃圾回收算法運行耗費時間,開啟垃圾回收算法會增加腳本的執行時間。
參考答案:C
答案解析:PHP中的垃圾回收機制,僅僅在循環回收算法確實運行時會有時間消耗上的增加。但是在平常的(更小的)腳本中應根本就沒有性能影響。
php垃圾回收機制的說法錯誤的是?
A、在一個垃圾周期中,通過檢查引用計數是否減1,并且檢查哪些變量容器的引用次數是零,來發現哪部分是垃圾
B、可以通過調用gc_enable() 和 gc_disable()函數來打開和關閉垃圾回收機制
C、通過清理未被使用的變量來節省內存的占用
D、php代碼執行完畢后會自動執行垃圾回收,所以不需要手動執行垃圾回收
參考答案:D
答案解析:php一段代碼有可能要長時間執行,但若此期間有未引用的變量的話,就會占用內存的空間,導致運行緩慢等問題
知識篇
一、概念
垃圾回收是一個多數編程語言中都帶有的內存管理機制。與非托管性語言相反:C, C++ 和 Objective C,用戶需要手動收集內存,帶有 GC 機制的語言:Java, javaScript 和 PHP 可以自動管理內存。
垃圾回收機制(gc)顧名思義,就是廢物重利用的意思,是一種動態存儲分配的方案。它會自動釋放程序不再需要的已分配的內存塊。垃圾回收機制可以讓程序員不必過分關心程序內存分配,從而將