jvm栈深度

什么是栈深度

每个jvm虚拟机的内存大小都是有限的,jvm虚拟机主要包括堆、虚拟机栈、本地(native)方法栈、程序计数器、方法区……此处说的栈指的是虚拟机栈。这个虚拟机栈的大小是 有限的,如果在同一个时刻执行很多方法(用极限的思想,假设有接近无穷个函数在同一个时间点执行),那所需要的内存是巨大的,超过了栈内存大小,就抛出栈溢出(StackOverflow)异常。栈深度可以通过函数调用自身,同时记录调用的次数,来计算,这个次数指的是当程序StackOverflow时的大小。

demo

public class StackDepth {
    private int depth;

    public void test(int i) {
        depth++;
        test(0);
    }

    public void getDepth() {
        test(0);
    }

    public static void main(String[] args) {
        StackDepth stackDepth = new StackDepth();
        try {
            stackDepth.test(0);
        } catch (StackOverflowError e) {
            System.out.println(stackDepth.depth);
        }
    }
}

因为每个函数所占用的栈大小,在编译的时候就是确定好的,当你这个函数有参数时,这个函数需要的栈内存肯定大一些,所以参数的个数也会影响栈深度大小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值