栈溢出

这节课我们讲一下栈溢出,栈溢出主要是在做递归调用的时候,循环定义的情况下,可能会发生一个栈溢出的一个问题,就是抛出

栈异常,也就是一个最大的深度
package com.learn.test;

/**
 * 栈溢出
 * 这个你默认的话不一样的
 * 最大深度可能跟每个的配置是不一样的
 * 这个你无法去说的
 * 我记得是1万2千多
 * 具体数字我也忘记了
 * 我们看一下默认深度是多少
 * 这是默认的
 * 
 * @author Leon.Sun
 *
 */
public class Test005 {

	private static int count;

	public static void count() {
		try {
			/**
			 * 在count方法里面做了count++;
			 */
			count++;
			/**
			 * 然后又调了count方法
			 * 这个叫做什么方法
			 * 这个叫做什么调用
			 * 递归方法一直在循环调用
			 * 
			 */
//			count();
		} catch (Throwable e) {
			/**
			 * 在这里我们也把日志给打印出来了
			 * 他最多最大的深度是为多少
			 * 最大深度:10692
			 * java.lang.StackOverflowError
			 * 报了这个异常为什么
			 * 10692的最大深度
			 * 如果你想再调用更深的可以有一个配置的
			 * 你们可以去加大深度调用
			 * 我们需要配置这样一段话就行了
			 * 默认深度你不能说具体的
			 * 每个电脑的运行效果不一样的
			 * 所以这个不好说
			 * 只能说大概是多少
			 * 默认深度是10692
			 * 我们可以加大他的深度调用
			 * 我们同样进行配置
			 * Run as -> Run Application -> VM arguments
			 * -Xss5m
			 * 最大深度:252212
			 * 只要我配置5M,
			 * 这个深度是他的多少倍
			 * 基本上是20多倍
			 * 默认1M能调多少深度
			 * -Xss1m
			 * 最大深度:10694
			 * 1M的情况下是10694
			 * 大概我们的默认深度是1M
			 * 在这里给你说一个误区
			 * 
			 */
			System.out.println("最大深度:" + count);
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		/**
		 * 这里有一个count方法
		 */
//		count();
		/**
		 * 我在这里写一个for循环
		 * 我这么调用会不会产生栈溢出的问题
		 * 这叫不叫递归调用
		 * 会不会产生栈溢出的问题
		 * 这个不是递归
		 * 递归里面才会产生的
		 * 这个肯定不会的
		 * 没有报任何错吧
		 * 然后我把它加大一倍
		 * 是不是也没有报错
		 * 是肯定不会的
		 * 栈采用递归调用的情况下
		 * 栈溢出是产生于递归调用
		 * 循环遍历是不会的
		 */
		for (int i = 0; i < 20805; i++) {
			count();
		}
	}
}
虚拟机栈溢出
错误原因: java.lang.StackOverflowError  栈内存溢出
栈溢出 产生于递归调用,循环遍历是不会的,但是循环方法里面产生递归调用, 也会发生栈溢出。 
解决办法:设置线程最大调用深度
-Xss5m 设置最大调用深度

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值