前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java 栈 最大深度理解

java 栈 最大深度理解

作者头像
用户1205080
发布2019-01-23 11:17:57
1.6K0
发布2019-01-23 11:17:57
举报
文章被收录于专栏:编码前线

1. 概述

某公司面试,总监大叔过来,问了图论及栈的最大深度,然后^_^

一直记着,今天搞一下

2. 代码

代码语言:javascript
复制
package com.jvm.test;public class JavaStackTest {

    private int count = 0;

    public void testStack(){
        count++;
        testStack();
    };

    public void test(){
        try {
            testStack();
        } catch (Throwable e) {
            System.out.println(e);
            System.out.println("stack height:"+count);
        }
    }

    public static void main(String[] args) {
        new JavaStackTest().test();
    }}

控制台输出

代码语言:javascript
复制
java.lang.StackOverflowError
stack height:11421

3. 总结

3.1 java栈是java虚拟机的一个重要的组成部分,在栈里进行线程操作,存放方法参数等等。

栈在初始化过后是有一定的大小的。

栈的高度称为栈的深度,栈深度受栈帧大小影响。

我们知道,在栈中存放局部变量,参数,运行中间结果等。

3.2 增加参数

(因为方法参数需要占用内存 所以栈可为方法本身占用的地方就减少了)

代码语言:javascript
复制
public void testStack(int a, int b){
        count++;
        testStack(a,b);
    }

控制台输出

代码语言:javascript
复制
java.lang.StackOverflowError
stack height:9654
3.3 进一步,

3.3.1 增加局部变量 数量

代码语言:javascript
复制
    public void testStack(int a, int b){
        int c =5;
        long d=4L;
        count++;
        testStack(a,b);
    }

控制台输出

代码语言:javascript
复制
java.lang.StackOverflowError
stack height:7854

3.3.2 增大变量值

代码语言:javascript
复制
    public void testStack(int a, int b){
        int c =5;
        long d=47777777777777777L;
        count++;
        testStack(a,b);
    }

控制台输出

代码语言:javascript
复制
java.lang.StackOverflowError
stack height:7846

由此可以看出,局部变量表内容越多,栈帧越大,栈深度越小。 知道了栈深度,该怎么用呢?对JVM调优有什么用呢?

当我们定义的方法参数和局部变量过多,字节过大,考虑到可能会导致栈深度多小,可能使程序出现错误。

这个时候就需要手动的增加栈的深度,避免出错。

3.4 调整jvm 栈大小
代码语言:javascript
复制
C:\Users\bianmaqianxian\Documents\mycode>java -Xss2m -cp "C:\Usersbianmaqianxian\Documents\mycode" JavaStackTest
java.lang.StackOverflowError
stack height:23345
C:\Users\bianmaqianxian\Documents\mycode>java -Xss5m -cp "C:\Users\bianmaqianxian\Documents\mycode" JavaStackTest
java.lang.StackOverflowError
stack height:93213
C:\Users\bianmaqianxian\Documents\mycode>java -Xss10m -cp "C:\Users\bianmaqianxian\Documents\mycode" JavaStackTest
java.lang.StackOverflowError
stack height:423618
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编码前线 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 概述
  • 2. 代码
  • 3. 总结
    • 3.1 java栈是java虚拟机的一个重要的组成部分,在栈里进行线程操作,存放方法参数等等。
      • 3.2 增加参数
        • 3.3 进一步,
          • 3.4 调整jvm 栈大小
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档