写程序让Java的堆、栈分别溢出……

写程序让Java的堆、栈分别溢出……
像这样蛋疼的问题估计也只能在面试的时候问一问了、
看了一些简单的JVM内存分配的博客和书籍、
知道堆、栈上面分别存储的是什么东西、这个事情就稍微好办一些了、

【1、Java栈溢出 思路 递归调用 】
如果想要栈溢出,可以递归调用方法,这样随着栈深度的增加,JVM 维持着一条长长的方法调用轨迹,直到内存不够分配,产生栈溢出。
public class Scheduled {
public void testStack(){
this.testStack();
}
public static void main(String[] args){
Scheduled s = new Scheduled();
s.testStack();
}
}


【2、Java堆溢出 思路 一直创建大对象 】
//		java堆溢出 
Vector v=new Vector();
for(int i=0;i<2500;i++){
v.add(new byte[1*1024*1024]);
}

还有一种方式写一个死循环创建一个ArrayList 一直往里放一个静态对象。但是在我自己的电脑测试始终不能溢出。程序如下:

public class Scheduled {
static class OOMObject{

}
public void testHeap(){
for(;;){
ArrayList<OOMObject> list = new ArrayList<OOMObject> ();
list.add(new OOMObject());
}
}
public static void main(String[] args){
Scheduled s = new Scheduled();
s.testHeap();
}
}

----上面这个例子把创建list的语句放到for循环外面搞定!创建一个list一直往里add不是一直创建好多个list每个里面扔一个。


参考资料:
http://fxlzs2000.iteye.com/blog/1786407
http://www.uucode.net/201504/jvm1

测试代码如下:近期会一直保持更新,欢迎关注~
https://github.com/ymm8505/InterviewStudy.git
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值