写Java代码分别使堆溢出,栈溢出
首先要搞清楚堆栈里放的什么东西:
栈存储运行时声明的变量——对象引用(或基础类型, 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 //最大堆大小
写Java代码分别使堆溢出,栈溢出的更多相关文章
- Lombok : 让你写 Java代码像C#一样爽
前言 我曾经是一名 .Net 开发,如今的我是一名 Java 开发者.在我享受着 Java 成熟的生态时,我常常怀念 c# 简洁的语法:自动属性.类型推断.自动初始化器 .... 鱼,我所欲也,熊掌亦 ...
- 写Java代码的一些小技巧
写Java代码有三年多了,遇到过很多坑,也有一些小小的心得.特地分享出来供各位学习交流.这些技巧主要涉及谷歌Guava工具类的使用.Java 8新特性的使用.DSL风格开发.代码封装等技巧. 一.nu ...
- 关于JS里面写JAVA代码的问题
最近做项目需要在JS脚本里面调用一个JAVA的函数得到数据,在网上查了很久,发现JS脚本里面不能写JAVA函数.只能把JS脚本里面的代码写进JSP文件里面的<script>标签内,然后写J ...
- myeclipse 写java代码提示 dead code 原因
经常使用MyEclipse要么Eclipse编辑写java程序猿代码.您可能经常会遇到一个黄色警戒线:dead code:一般程序猿遇到这些问题都会置之不理,反正也不影响程序的编译运行.对,这不是bu ...
- 写java代码遇到的一些问题
记录一些做论文实验写代码时遇到的问题. 数据库SQL语句方面: 1.java通过JDBC连接MySql数据库方法 参见:http://hzy3774.iteye.com/blog/1689525 2. ...
- jsp----在jsp中写java代码(变量和函数方法)
<%@page import="java.text.SimpleDateFormat"%><%@page language="java" im ...
- 用EditPlus和jdk写Java代码
一.安装EditPlus EditPlus: https://www.editplus.com/latest4.html EditPlus注册码在线生成: https://www.jb51.net/t ...
- 写java代码有感。。。构造方法最好带着,
(一) 小结:具体我最大的担心,害怕就是方法调用的时候,new对象之后,赋值,是在new后面的括号里实现,还是在 对象.方法名()这样的.当然带参数的构造方法,调用时本身就直接调用,普通方法,选后者. ...
- 让你的eclipse实现写JAVA代码,HTML,CSS,JAVASCRIPT代码提示
1.打开eclipse→Windows→Preferences→Java→Editor→Content Assist 改动Auto Activation triggers for java的值为:zj ...
随机推荐
- Factory——工厂方法
一.定义 GOF上对工厂方法的意图如此描述:定义一个用于创建对象的接口,让子类决定实例化哪个类.Factory Method使一个类的实例化延迟到其子类. 作为类的开发者,我们通常会在类中提供构造器方 ...
- js---设置cookie的方法
在客户端进行一些操作的时候,很多时候会要用到设置cookie的方法.具体的做法: <script type="text/javascript"> var documen ...
- 基本的sqlplus命令
以下是一些sqlpus命令 remark 注释行set headsep 标题分隔符ttitle 头标题btitle 尾标题column ...
- oracle 11g R2(静默安装)
参考博客地址:https://blog.csdn.net/jameshadoop/article/details/48223645 https://www.abcdocker.com/abcdocke ...
- Oracle考试题作业
新建一张学员信息表(student),要求:1. 字段如下:学号(sid),姓名(name),性别(sex),年龄(age),地址(address).2. 分别为字段添加约束:学号为主键,姓名为非空, ...
- 转 Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和优势
Kafka.RabbitMQ.RocketMQ等消息中间件的对比 —— 消息发送性能和优势 引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前 ...
- [数学]MIT牛人解说数学体系
本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/study/science/mit_math ...
- 深度学习基础(三)NIN_Network In Network
该论文提出了一种新颖的深度网络结构,称为"Network In Network"(NIN),以增强模型对感受野内local patches的辨别能力.与传统的CNNs相比,NIN主 ...
- shell编程之awk命令详解
shell编程之awk命令详解 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; out ...
- Docker入门4------Dockerfile
转自:https://www.cnblogs.com/jsonhc/p/7766841.html https://www.cnblogs.com/jsonhc/p/7767669.html Docke ...