写Java代码分别使堆溢出,栈溢出
2016-03-10 21:43
393 查看
我们知道,在JAVA中,可以使用关键字new来创建Java对象。例如,
ArrayList list = new ArrayList();
实际上,在创建完上面的一个对象后,在JVM中,会把new出来的对象存放在堆内存中,
同时,在方法栈中存放着对象的引用关系。
如果想要堆溢出,比较简单,可以循环创建对象或大的对象;
如果想要栈溢出,可以递归调用方法,这样随着栈深度的增加,JVM 维持着一条长长的方法调用轨迹,
直到内存不够分配,产生栈溢出。
因此,可以使用下面简单的代码实现堆溢出和栈溢出。
Java代码
public class Test {
public void testHeap(){
for(;;){
ArrayList list = new ArrayList (2000);
}
}
int num=1;
public void testStack(){
num++;
this.testStack();
}
public static void main(String[] args){
Test t = new Test ();
t.testHeap();
t.testStack();
}
}
另外,Java虚拟机的堆大小如何设置:命令行
java –Xms128m //JVM占用最小内存
–Xmx512m //JVM占用最大内存
–XX:PermSize=64m //最小堆大小
–XX:MaxPermSize=128m //最大堆大小
ArrayList list = new ArrayList();
实际上,在创建完上面的一个对象后,在JVM中,会把new出来的对象存放在堆内存中,
同时,在方法栈中存放着对象的引用关系。
如果想要堆溢出,比较简单,可以循环创建对象或大的对象;
如果想要栈溢出,可以递归调用方法,这样随着栈深度的增加,JVM 维持着一条长长的方法调用轨迹,
直到内存不够分配,产生栈溢出。
因此,可以使用下面简单的代码实现堆溢出和栈溢出。
Java代码
public class Test {
public void testHeap(){
for(;;){
ArrayList list = new ArrayList (2000);
}
}
int num=1;
public void testStack(){
num++;
this.testStack();
}
public static void main(String[] args){
Test t = new Test ();
t.testHeap();
t.testStack();
}
}
另外,Java虚拟机的堆大小如何设置:命令行
java –Xms128m //JVM占用最小内存
–Xmx512m //JVM占用最大内存
–XX:PermSize=64m //最小堆大小
–XX:MaxPermSize=128m //最大堆大小
相关文章推荐
- struts2内Action方法调用
- Java内存泄漏问题
- springmvc详解(一)
- java中dynamic web project与web project 的区别
- idea部署jrebel热更新方案
- Java-如何去掉JFrame上的最大化最小化和关闭按钮
- Jvm内存分配分析,Java OutOfMemoryError原因分析
- Myeclipse Web project 重命名问题(如何彻底修改工程名)
- java开发spark应用程序的环境搭建
- Spring MVC请求处理流程图分析
- java 集合知识点(未完)
- 用Kotlin写一个基于Spring Boot的RESTful服务
- hdu1016JAVA
- 用Kotlin写一个基于Spring Boot的RESTful服务
- Java生成MyEclipse8.6+序列号代码
- JAVA调用条码打印机打印二维码
- Java web学习(五)
- Java生成二维码方法
- Spring AOP的两种代理方式
- Java中Runnable和Thread的区别