C++和java内存泄漏有什么区别

什么是内存泄漏,C++和java内存泄漏有什么区别,如何避免内存泄漏?

       一般来说,内存泄漏存在两种情况。一种情况如在C/C++语言中的,在堆中分配的内存,在还没有将其释放掉的时候,就把所有能访问这块内存的方式都删掉(如指针重新赋值);另一种情况则是在内存对象明明已经不需要的时候,还仍然保留着这块内存和它的访问方式(引用)。

        第一种情况,在Java种有垃圾回收机制(GC)的引入,已经得到了很好的解决。所以,Java中的内存泄漏主要指的是第二种情况。而C++则包含以上两种情况。

        在不涉及复杂数据结构的一般情况下,Java 的内存泄露表现为一个内存对象的生命周期超出了程序需要它的时间长度。我们有时也将其称为“对象游离”。

        要避免这种情况下的内存泄露,要求我们以C/C++ 的内存管理思维来管理自己分配的内存。第一,是在声明对象引用之前,明确内存对象的有效作用域。在一个函数内有效的内存对象,应该声明为 local 变量,与类实例生命周期相同的要声明为实例变量……以此类推。第二,在内存对象不再需要时,记得手动将其引用置空。

 

 

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