C++和java內存泄漏有什麼區別

什麼是內存泄漏,C++和java內存泄漏有什麼區別,如何避免內存泄漏?

       一般來說,內存泄漏存在兩種情況。一種情況如在C/C++語言中的,在堆中分配的內存,在還沒有將其釋放掉的時候,就把所有能訪問這塊內存的方式都刪掉(如指針重新賦值);另一種情況則是在內存對象明明已經不需要的時候,還仍然保留着這塊內存和它的訪問方式(引用)。

        第一種情況,在Java種有垃圾回收機制(GC)的引入,已經得到了很好的解決。所以,Java中的內存泄漏主要指的是第二種情況。而C++則包含以上兩種情況。

        在不涉及複雜數據結構的一般情況下,Java 的內存泄露表現爲一個內存對象的生命週期超出了程序需要它的時間長度。我們有時也將其稱爲“對象遊離”。

        要避免這種情況下的內存泄露,要求我們以C/C++ 的內存管理思維來管理自己分配的內存。第一,是在聲明對象引用之前,明確內存對象的有效作用域。在一個函數內有效的內存對象,應該聲明爲 local 變量,與類實例生命週期相同的要聲明爲實例變量……以此類推。第二,在內存對象不再需要時,記得手動將其引用置空。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章