在C语言中,程序员完全控制动态创建对象的分配和回收。如果程序员不销毁对象,内存泄漏就会发生在C语言中,
Java会自动进行垃圾回收。但是, 在某些情况下, 垃圾回收器不会收集对象, 因为存在对它们的引用。在某些情况下, 应用程序会创建许多对象而不使用它们。仅仅因为每个对象都有有效的引用, Java中的垃圾回收器不能破坏物体。这类无用的对象称为内存泄漏。如果分配的内存超出限制, 则程序将通过抛出OutOfMemoryError终止。因此, 如果不再需要某个对象, 则强烈建议使该对象符合垃圾收集器的条件。否则, 我们应该使用一些执行内存管理的工具来识别无用的对象或内存泄漏, 例如:
- HP OVO
- HP JMETER
- JProbe
- IBM Tivoli
// Java Program to illustrate memory leaks
import java.util.Vector;
public class MemoryLeaksDemo
{
public static void main(String[] args)
{
Vector v = new Vector( 214444 );
Vector v1 = new Vector( 214744444 );
Vector v2 = new Vector( 214444 );
System.out.println( "Memory Leaks" );
}
}
输出如下:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space exceed