Java 中可能会存在内存泄漏吗
程序员文章站
2022-04-19 16:05:03
...
Java 中可能会存在内存泄漏吗?其实答案是会得,但是从理论上来讲
Java有垃圾回收机制(GC)不会存在内存泄露问题(这也是Java被广
泛使用于服务器端编程的一个重要原因);然而在实际开发中,可能会
存在无用但可达的对象,这些对象不能被GC回收也会发生内存泄露。
一个例子就是Hibernate的Session(一级缓存)中的对象属于持久
态,垃圾回收器是不会回收这些对象的,然而这些对象中可能存在无用
的垃圾对象。下面的例子也展示了Java中发生内存泄露的情况:
代码如下
package com.lovo;
import java.util.Arrays;
import java.util.EmptyStackException;
public class MyStack<T> {
private T[] elements;
private int size = 0;
private static final int INIT_CAPACITY = 16;
public MyStack() {
elements = (T[]) new Object[INIT_CAPACITY];
}
public void push(T elem) {
ensureCapacity();
elements[size++] = elem;
}
public T pop() {
if(size == 0)
throw new EmptyStackException();
return elements[--size];
}
private void ensureCapacity() {
if(elements.length == size) {
elements = Arrays.copyOf(elements, 2 * size + 1);
}
}
}