一、垃圾回收机制
java中引入了一种独特的内存回收机制解决了过去在c++中令人头疼的内存管理问题,使得java程序员在编写程序的时候不必考虑内存的问题。
由于这个机制的存在,java的对象不再有"作用域"的概念,只有对象的引用才有"作用域"。
他很有效的防止了内存泄漏,同时也更加能利用空闲的内存。
这里出现了两个概念:内存泄露(memory leak) 和 内存溢出(out of memory)。
内存泄露:指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。
内存溢出:指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错,即所谓的内存溢出。
内存泄露量大到一定程度会导致内存溢出。但是内存溢出不一定是内存泄露引起的。
常见的内存泄露有四类:
1、常发性内存泄漏
发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
2、偶发性内存泄漏
发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
3、一次性内存泄漏