Java的内存泄漏

1. Java是否存在内存泄漏? 

      Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或JVM的问题。其实,这种想法是不正确的,因为Java也存在内存泄漏,但它的表现与C++不同。

2. 什么是Java中的内存泄漏?

      我们知道在Java中也有内存泄漏,但范围比C++要小一些。因为Java从语言上保证,任何对象都是可达的,所有的不可达对象都由GC管理。

       程序员来说,GC基本是透明的,不可见的。虽然,我们只有几个函数可以访问GC,例如运行GC的函数System.gc(),但是根据Java语言规范定义, 该函数不保证JVM的垃圾收集器一定会执行。因为,不同的JVM实现者可能使用不同的算法管理GC。通常,GC的线程的优先级别较低。JVM调用GC的策略也有很多种,有的是内存使用到达一定程度时,GC才开始工作,也有定时执行的,有的是平缓执行GC,有的是中断式执行GC。

3. 内存泄露、内存溢出、内存不足的区别?

3.1 内存泄漏:

也称作“存储渗漏”,英文叫memory leak。是指用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏。内存泄露最终会导致内存不足。

3.2 内存溢出:

英文叫memory overflow。与缓冲区溢出类似。比如,char ch[10],却输入11个char进去。

但是很多人直接把内存溢出当成内存不足了。

3.3 内存不足:

英文叫out of memory。申请内存时,没有足够的空间。

猜你喜欢

转载自guwq2014.iteye.com/blog/2309849