Hello World

吞风吻雨葬落日 欺山赶海踏雪径

0%

JVM内存溢出面试题

要求写代码溢出 堆、栈、方法区

设置对应的参数后:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package kan;
/**
* VM Args : -Xms1m -Xmx1m
*/

import java.util.ArrayList;
import java.util.List;

public class Overheap {

static class OOheap {

}

public static void main(String[] args) {

List<OOheap> l = new ArrayList<OOheap>();
while (true) {
l.add(new OOheap());
}
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* VM Args : -Xss100k
*/
public class OverStack {

public void leakStack() {
leakStack();
}

public static void main(String[] args) {
OverStack o = new OverStack();
try {
o.leakStack();
} catch (Exception e) {
e.printStackTrace();
}
}
}

方法区

(这个比较麻烦,偷懒溢出常量池)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* VM Args: -XX:PremSize=100k -XX:MaxPremSize=100k
*/
import java.util.ArrayList;
import java.util.List;

public class OverPremGen {

public static void main(String[] args) {

List l = new ArrayList();
int i = 0;
while(true){

l.add(String.valueOf(i++).intern());
}
}
}