關鍵區別–垃圾收集器與析構函數
大多數編程語言都支持面向對象編程。它是一種使用對象構建程序或軟件的方法。對象是使用類創建的,因此它是類的實例。類提供對象應該由什麼組成的描述。創建對象時,會為對象分配內存。分配的內存應該在程序執行結束時釋放,以便將該內存重新用於其他對象。諸如java和C++的.NET等編程語言使用垃圾收集器進行內存管理,而C語言和C++語言則要求程序員處理內存管理。應分配必要的內存量,並在執行結束時釋放內存。垃圾收集器和析構函數用於釋放內存。垃圾收集器和析構函數的關鍵區別在於,垃圾收集器是一種執行自動內存管理的軟件,而析構函數是垃圾收集器在銷燬對象期間調用的特殊方法。
目錄
1. 概述和主要區別
2. 什麼是垃圾收集器
3. 什麼是毀滅者
4. 垃圾收集器和析構函數的相似性
5.並列比較-垃圾收集器與析構函數的表格形式
6. 摘要
什麼是垃圾收集器(a garbage collector)?
一些編程語言具有託管代碼環境。在編程語言Java和C#中,執行自動內存管理。程序員不需要釋放對象使用的內存。因為內存管理是自動完成的,所以他們甚至更容易開發複雜的系統。在C、C++和Objic C等編程語言中,程序應該將對象的內存釋放回系統。Java和C等語言可以找出不再使用的對象。然後,它們將分配給這些對象的內存釋放回系統。
在編程語言C#和Java中,如果有一個名為Student的類,那麼可以使用Student s=new Student()創建一個對象;“new”用於創建Student類的實例。它在系統中分配內存。's'是指為該對象分配的內存塊。語言環境識別對象是否被使用。如果不進一步使用,則釋放內存,以後可以使用。
運行程序時,內存塊是從系統內存池中分配的。然後程序使用該內存執行任務。當程序執行結束時,垃圾回收器會判斷為程序分配的內存塊是否是必需的。如果不需要,這些內存塊將返回到系統。因此,垃圾回收器可以跟蹤程序中創建的對象。不再需要的內存塊被髮送回系統內存池。這個過程的主要優點是確認程序員不必專注於內存釋放。它平衡了性能和內存使用。
什麼是毀滅者(a destructor)?
析構函數是一個特殊的類的成員。每當對象超出範圍時都會調用它。當函數結束或程序執行結束時,可以銷燬對象。析構函數與類名同名。構造函數用於創建對象。它可以接受參數。構造函數也可以有返回值。但在析構函數中,沒有返回類型或接受參數。一個類只能由一個析構函數組成。析構函數是使用顎化符來引用的。如果類名是Student,那麼析構函數是~Student(){}。
垃圾回收器查找不再需要的對象。它確保程序不再使用的對象應該被銷燬。它調用析構函數釋放內存並釋放資源。析構函數用於釋放內存、關閉文件、釋放網絡資源和關閉數據庫連接。在大多數編程語言中,不必編寫析構函數,因為垃圾回收器會自行調用默認構造函數。如果程序員使用C++語言中的指針進行任何動態內存分配,那麼他應該編寫一個析構函數在對象被銷燬之前釋放內存。
什麼是垃圾收集器與析構函數的相似性(the similarity between garbage collector and destructor)?
- 垃圾收集器和析構函數都用於釋放程序不再需要的內存。
垃圾收集器(garbage collector)和析構函數(destructor)的區別
垃圾收集器與析構函數 | |
垃圾收集器是一種執行自動內存管理的軟件。 | 析構函數是垃圾回收器在銷燬對象期間調用的一種特殊方法。 |
類型 | |
垃圾收集器是一種軟件。 | 析構函數是一種方法。 |
總結 - 垃圾收集器(garbage collector) vs. 析構函數(destructor)
垃圾收集器和析構函數是與釋放內存相關的兩個術語。本文討論了垃圾收集器和析構函數之間的區別。垃圾回收器和析構函數的區別在於,垃圾回收器是執行自動內存管理的軟件,而析構函數是垃圾回收器在銷燬對象期間調用的特殊方法。
下載垃圾收集器vs析構函數的pdf文件
你可以下載這篇文章的PDF版本,並根據引文說明離線使用。請在這裡下載PDF版本:垃圾收集器和析構函數的區別