java代码实现JVM栈溢出,堆溢出
参考博客:http://www.cnblogs.com/tv151579/p/3647238.html
背景知识:
- 栈存放什么:栈存储运行时声明的变量——对象引用(或基础类型, primitive)内存空间, 栈的实现是先入后出的。
- 堆存放什么:堆分配每一个对象内容(实例)内存空间。
- 栈溢出:java.lang.StackOverflowError
- 堆溢出:java.lang.OutOfMemoryError: Java heap space
- 栈溢出实现,可以递归调用方法,这样随着栈深度的增加,JVM 维持着一条长长的方法调用轨迹。
- 堆溢出实现,可以循环创建对象或大的对象;
直到内存不够分配,产生栈溢出。
一、栈溢出
两种情况:
- 线程请求的栈深度大于虚拟机允许的最大深度 StackOverflowError
- 虚拟机在扩展栈深度时,无法申请到足够的内存空间 OutOfMemoryError
二、堆溢出
创建对象时如果没有可以分配的堆内存,就会出现堆溢出。
三、 两者实例如下:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class testCode {
public void testHeap(){//堆溢出
List<byte[]> list = new ArrayList<>();
int i=0;
while (true){
list.add(new byte[5*1024*1024]);
System.out.println("count is: "+(++i));
}
}
int num = 1;
public void testStack(){ //栈溢出
num++;
this.testStack();
}
public static void main(String[] agrs){
testCode t = new testCode();
t.testHeap();
t.testStack();
}
}
运行结果:
//堆溢出:
count is: 343
count is: 344
count is: 345
count is: 346
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at testCode.testHeap(testCode.java:14)
at testCode.main(testCode.java:25)
//栈溢出:
StackOverflowError
- 1
- 2
另外,Java虚拟机的堆大小如何设置:命令行
java –Xms128m //JVM占用最小内存
–Xmx512m //JVM占用最大内存
–XX:PermSize=64m //最小堆大小
–XX:MaxPermSize=128m //最大堆大小
- 1
- 2
- 3
- 4
- 5
- 6
java代码实现JVM栈溢出,堆溢出的更多相关文章
- 实战Java虚拟机之中的一个“堆溢出处理”
从今天開始.我会发5个关于java虚拟机的小系列: 实战Java虚拟机之中的一个"堆溢出处理" 实战Java虚拟机之二"虚拟机的工作模式" 实战Java虚拟机之 ...
- 通过编写Java代码让Jvm崩溃
在书上看到一个作者提出一个问题"怎样通过编写Java代码让Jvm崩溃",我看了之后也不懂.带着问题查了一下,百度知道里面有这样一个答案: 1 package jvm; 2 3 pu ...
- Java 中的 JVM、堆和栈 -- 初步了解
JVM -- Java Virtual Machine(Java虚拟机) —— 因为要说堆和栈,所以我们必须要先简单的说一下JVM.(JVM详细请找度娘啦~) 首先,我们都知道 java 一直宣传的口 ...
- JVM异常之:堆溢出OutofMemoryError
1.堆溢出 Java 堆内存的OutOfMemoryError异常是实际应用中最常见的内存溢出异常情况.出现Java 堆内存溢出时,异常堆栈信息“java.lang.OutOfMemoryError” ...
- 关于编写Java程序让Jvm崩溃
今天在书上看到一个作者提出一个问题“怎样通过编写Java代码让Jvm崩溃”,我看了之后也不懂.带着问题查了一下,百度知道里面有这样一个答案: package jvm; public class Cra ...
- (转)Java 详解 JVM 工作原理和流程
作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚 ...
- (摘录)Java 详解 JVM 工作原理和流程
作为一名Java使用者,掌握JVM的体系结构也是必须的. 说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java ...
- Java 详解 JVM 工作原理和流程
Java 详解 JVM 工作原理和流程 作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java ...
- Java 7 jstat – JVM Statistics Monitoring Tool【翻译】
原文地址:Java 7 jstat 本文内容 语法 参数 描述 虚拟机标识符 选项 一般选项 输出选项 示例 先发出来,然后慢慢翻译~ 语法 jstat [ generalOption | outpu ...
随机推荐
- WSGI的理解 perfect
https://blog.csdn.net/hzrandd/article/details/10099871 https://blog.csdn.net/cloudxli/article/detail ...
- Flask路由系统与模板系统
路由系统 @app.route('/user/<username>') @app.route('/post/<int:post_id>') @app.route('/post/ ...
- 日志输出:控制台和log文件输出日志
self_log.py 中 import os import logging import time # 如果日志文件夹不存在,则创建 log_dir = "log" # 日志存放 ...
- NSUserDefaults保存对象数组报错
在使用NSUserDefaults的时候插入数据有时候会报以下错误:Attempt to set a non-property-list objec 这种错误的原因是插入了不识别的数据类型,NSUse ...
- neutron ml2
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhoumingbo532/article/details/27964675 在介绍ml2之前,先介绍 ...
- JDK 注解详解
注解用途 我们在使用spring MVC框架时用到了很多的注解,如:@Controller.@RequestMapping等等,spring框架通过反射获取到标签进行不同的逻辑处理.注解是代码的附属信 ...
- 移植nand驱动补缺:make mrproper与make clean以及make distclean,find/grep. makefile
make mrproper与make clean以及make distclean的区别: linux内核源码根目录下面的makefile中有很清晰的解析: useage: “clean”:Remove ...
- 自己动手写RNN
说的再好,也不如实际行动,今天手写了一个RNN,没有使用Numpy库,自己写的矩阵运算方法,由于这也只是个学习用的demo,所以矩阵运算那一部分写的比较丑陋,见笑了. import com.mylea ...
- python全栈开发从入门到放弃之迭代器生成器
1.python中的for循环 l = [1,2,3,4,5,6] for i in l: #根据索引取值 print(i) 输出结果: 1 2 3 4 5 6 2.iterable 可迭代的 可迭 ...
- jQuery HTML操作学习笔记
学习资料 jQuery教程 获取 1.获取.设置元素的内容 1.1获取或设置目标元素的文本内容 语法 $(selector).text(); 获取元素文本内容 $(selector).text(con ...