博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
写Java代码分别使堆溢出,栈溢出
阅读量:5847 次
发布时间:2019-06-18

本文共 1412 字,大约阅读时间需要 4 分钟。

转自:http://fxlzs2000.iteye.com/blog/1786407

转自:http://my.oschina.net/sdrkyj/blog/143410

前言

primitive type: 基本类型,像int、double就是。 wrapped type:包装类型,int—>Integer,double—>Decimal 基本类型跟就是不可实例化的,可以直接初始化、赋值、运算。不可调用方法,不可放入容器(要求必须是类实例才行)。 包装类型就是把基本类型变成一个类实例,一定要new才产生,可以调用方法,可以放入容器。

首先要搞清楚堆栈里放的什么东西:

栈存储运行时声明的变量——对象引用(或基础类型, primitive)内存空间,堆分配每一个对象内容(实例)内存空间。

一个变量可以先后指向多个对象实例;数组、链表等可以存放对多个实例对象内容的引用关系。没有引用关系的对象内容按说被虚拟机回收(recycled,destroy,在C++叫delete,在C叫free)。 栈的实现是先入后出的, 相似的集装箱那种货舱。 堆是随机存放的, 相似于现在的停车场。 记得曾经,有一本游戏的外国书, 说游戏要分配好栈空间和堆空间; 在开始时候分配固定容量的空间, 有不同的自顶向下和从下向上的地址空间分配。

stackoverflow , 总是在无限递归调用时候可以看见(google也经常有同名网站的结果)。

堆内存满, 可以通过无限new实现。

======================华丽的分隔符================================

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

ArrayList list = new ArrayList();

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

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

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

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

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

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

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 //最大堆大小

转载地址:http://lbwjx.baihongyu.com/

你可能感兴趣的文章
谈数据中心“容灾和备份的区别”
查看>>
linux的LVM
查看>>
不同的类UNIX操作系统密码破解方法介绍
查看>>
MySQL 5.6 for Windows配置安装之解压缩版
查看>>
ubuntu jdk
查看>>
hive报错(2)udf无法找到第三方的类
查看>>
HashCode
查看>>
Nginx解析PHP问题
查看>>
A2SD 命令集
查看>>
实例:Linux EXT3文件系统下成功恢复误删的文件[原创]
查看>>
盘点5款Ubuntu监控工具解决CPU暴增问题
查看>>
linux_定时任务
查看>>
Xorg <= 1.10 remote root 0day exploit (32-bit x86)
查看>>
2010下半年网络规划设计师上午试卷、标准参考答案及分析(1)
查看>>
szshunjia储存不干胶标签的心得简述分享
查看>>
最近几年做软件项目的心得总结
查看>>
10个网页设计师必备的CSS技巧(转)
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
oneinstack增加fileinfo扩展
查看>>