写Java代码分别使堆溢出,栈溢出

我们知道,在JAVA中,可以使用关键字new来创建Java对象。例如,

ArrayList list = new ArrayList();

实际上,在创建完上面的一个对象后,在JVM中,会把new出来的对象存放在堆内存中,

同时,在方法栈中存放着对象的引用关系。

如果想要堆溢出,比较简单,可以循环创建对象或大的对象;

如果想要栈溢出,可以递归调用方法,这样随着栈深度的增加,JVM 维持着一条长长的方法调用轨迹,

直到内存不够分配,产生栈溢出。

 

因此,可以使用下面简单的代码实现堆溢出和栈溢出。

Java代码   收藏代码
  1. public class Test {  
  2.   
  3.     public void testHeap(){  
  4.         for(;;){  
  5.               ArrayList list = new ArrayList (2000);  
  6.           }  
  7.     }  
  8.     int num=1;  
  9.     public void testStack(){  
  10.         num++;  
  11.         this.testStack();  
  12.      }  
  13.       
  14.     public static void main(String[] args){  
  15.         Test  t  = new Test ();  
  16.         t.testHeap();  
  17.         t.testStack();     
  18.     }  
  19. }  

 

 另外,Java虚拟机的堆大小如何设置:命令行

 java –Xms128m //JVM占用最小内存

           –Xmx512m //JVM占用最大内存

           –XX:PermSize=64m //最小堆大小

           –XX:MaxPermSize=128m //最大堆大小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值