📄 leakstack.java
字号:
package net.betterjava.memory.leak;
import java.util.EmptyStackException;
class Element {
private byte[] data;
public Element(int size) {
data = new byte[size];
}
}
public class LeakStack {
private Object[] stack;
private int top = -1;
public LeakStack(int initialCapacity) {
stack = new Object[initialCapacity];
}
public void push(Object e) {
ensureCapacity();
top++;
stack[top] = e;
}
public Object pop() {
if (top == -1)
throw new EmptyStackException();
Object temp = stack[top];
stack[top] = null;
top--; //release the reference of Element
return temp;
}
private void ensureCapacity() {
if (stack.length == top + 1) {
Object[] temp = stack;
stack = new Object[2 * stack.length + 1];
System.arraycopy(temp, 0, stack, 0, top);
}
}
public static void main(String[] args) {
try {
int round = 1000;
LeakStack s = new LeakStack(2000);
for (int i = 0; i < 2; i++) {
System.out.println("push" + i);
for (int j = 0; j < round; j++) {
s.push(new Element(60000));
//System.gc();
}
System.out.println("pop" + i);
for (int j = 0; j < round; j++) {
s.pop();
}
}
} catch (EmptyStackException e) {
e.printStackTrace(System.out);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -