什么是java栈深度?

java栈深度有什么用?

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

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

public class Test{
    
    private int count = 0;
    
    public void testAdd(){
        count ++;
        testAdd();
    }
    public void test(){
        try{
        testAdd();
         }catch(Throwable e){
             System.out.println(e);
             System.out.println("栈深度:"+count);
         }
    }
    public static void main(String [] args){
        new Test().test();
    }    
}

运行程序,可以看到栈深度:

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

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

虚拟机JVM中的java栈深度

通过-Xss可以设置栈的大小:

虚拟机JVM中的java栈深度

----------改变传入参数--增加传入参数,观察栈深度变化。

    public void testAdd(int a,int b,int c){
        count ++;
        testAdd(a,b,c);
    }

运行程序:

结果-栈深度:6632

----------增加局部变量:

    public void testAdd(int a,int b,int c){
        int d=0;
        long h=9l;
        count ++;
        testAdd(a,b,c);
    }

结果-栈深度-5928.

由此可以看出,局部变量表内容越多,栈帧越大,栈深度越小。

知道了栈深度,该怎么用呢?对JVM调优有什么用呢?

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

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

而且当看到StackOverFlow的时候我们也可以知道可能是栈溢出造成的错误。知道如果去解决。这才是最重要的。

相关文章:

  • 2021-12-06
  • 2021-07-22
  • 2021-12-07
  • 2021-11-24
  • 2021-10-01
  • 2021-04-19
  • 2021-04-21
  • 2021-08-04
猜你喜欢
  • 2021-10-18
  • 2021-07-15
  • 2021-05-20
  • 2021-10-08
  • 2021-06-18
  • 2021-05-12
相关资源
相似解决方案