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

栈存储运行时声明的变量——对象引用(或基础类型, 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 //最大堆大小

转载于:https://www.cnblogs.com/MJyc/p/10408222.html

写Java代码分别使堆溢出,栈溢出相关推荐

  1. 写java代码时的注意事项_从方法返回Java 8的可选项时的注意事项

    写java代码时的注意事项 Java 8引入的Optional类一直是该语言版本引入的最具争议的功能之一. 尽管我喜欢这个新的Java类的东西比不喜欢的东西多,但在Java方法中将其用作return类 ...

  2. Jupyter 配置 Java环境,写Java代码,测试成功

    本次简单诉说下怎么通过jupyter安装iJava,写Java代码. 安装Java的不说了 我使用的是Java15 然后去:https://github.com/SpencerPark/IJava/r ...

  3. java el表达式 导航规则_诺禾:在jsp里面如何不写java代码展示数据(EL表达式的使用)...

    EL表达式可以简化jsp中写的java代码 在jsp里面如何不写java代码展示数据(EL表达式的使用) 在jsp里面如何不写java代码展示数据(EL表达式的使用) 在jsp里面如何不写java代码 ...

  4. vscode写java没有提示_VS Code报错Language Support for Java(TM)插件显示需要JDK11 写java代码没有提示...

    鉴于IDEA的打开速度(电脑的垃圾),平常刷LeetCode都是在VSCode上,结果这几天老是打开给我报错 Java 11 or more recent is required to run. Pl ...

  5. 如何在jsp里面写java代码

    jsp和html相比,最显著的优势就在于,jsp里面可以写java代码,但是html中不能. 那么如何在jsp中写java代码呢! jsp中写java代码有如下三种方式: <%! %>,这 ...

  6. Eclips写Java代码和CSS、Javascript、Html代码设置代码自动提示功能

    按照我的方法设置后用Eclipse编写Java代码和前端代码(Html.CSS.JS)都可以自动提示代码.赶紧去试试吧. 1.打开Eclipse软件,点击Windows→Preferences→Jav ...

  7. jsp里写java代码报错,jsp里写java代码报错

    jsp里写java代码报错 [2021-02-11 06:42:03]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/ ...

  8. vim java 编程_你也用Vim写Java代码?

    献给所有曾试图写Java而痛苦挣扎的Vimers, 请不要害怕, 我也是你们的一员 序 文章源起于segmentfault论坛中的一个问题, 由于回答的有点尽性, 便转为文章. 题主应该是个Vim初学 ...

  9. 同事说,我写Java代码像写诗

    文章来源:http://33h.co/kntu3 前几天空闲时间写了一遍关于平时自己写代码的一些习惯,这里跟大家分享一下. 定义配置文件信息✦ 有时候我们为了统一管理会把一些变量放到 yml 配置文件 ...

  10. 写java代码用什么软件好,重要概念一网打尽!

    正文 下文中截图来源于朋友一个pdf版本的面经,把所以知识点的答案整理了下来,耗费他至少1个月时间,在本文最后部分把这个pdf分享给大家,觉得有用的麻烦点赞关注走一波,谢谢!!!面经中有他的知识点的答 ...

最新文章

  1. struts2导入excel模板_「微干货」“人员其他数据导入”应用介绍
  2. 聚焦云原生,阿里云与 CNCF 共话「云未来,新可能」
  3. Winform中实现新增和更新共用一个页面的示例流程
  4. Android 常用权限
  5. 如何在ashx页面获取Session值(未将对象引用设置到对象的实例) (转)
  6. PostgreSQL学习手册(数据库维护) 转
  7. 由Dvbbs PHP 0day引发的争论
  8. HttpClient中异步方法的同步调用
  9. JSON和JSONP的差别,以及用法
  10. 吴恩达团队新研究:用X光片识别14种疾病,AI准确度部分超越人类
  11. 《战争论》第四篇《战斗》的主要内容
  12. Nginx源码分析 - 主流程篇 - 多进程的惊群和进程负载均衡处理(15)
  13. idea中mapper.xml的头文件配置
  14. 【接箱子2.0】新手划过,dalao勿喷
  15. 这次的新计算,很全能!
  16. Eclipse3.5中安装maven插件出现“ the -vm option in eclipse.ini is pointing to a JDK”解决
  17. 使用SyncNavigator轻松实现数据库异地同步、断点续传、异构同步
  18. ZLMediaKit源码分析 - NotifyCenter
  19. 小程序发送模板消息给用户 —— 一次性模板实现“长期订阅”
  20. 【阿里云】第一次进行域名注册、备案以及使用全过程

热门文章

  1. 行内元素多出的空白文本节点的解决方法
  2. gcc -nostartfiles; -nodefaultlibs; -nostdlib;-f...
  3. Error accessing PRODUCT_USER_PROFILE?
  4. 常用的一些注入命令!!!
  5. 搭建基于ASP.NET 2.0的DNN 4.X模块开发环境及模块实例(2)
  6. “无法找到Internet Explorer”的解决方法
  7. python if条件判断语句
  8. 100 - k8s源码分析-准备工作
  9. 初步了解CUDA(零)
  10. 运用异或运算实现两个数不通过中间变量交换值的原理分析