gpt4 book ai didi

java - 函数的最大堆栈空间

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:42 24 4
gpt4 key购买 nike

我正在尝试确定我的 fork/join 实现何时会堆栈溢出。

我知道编译器决定了一个函数在编译时需要的最大堆栈空间。所以这些信息应该在我的 java 代码的 .class 文件中可用。但是,我似乎无法弄清楚如何获得这个值(value)。

我能否在运行时将其打印出来,或者任何人都可以指出我可以在类文件中找到它的位置吗? gedit 中全是乱码,所以我似乎找不到它。

最佳答案

没有简单的方法可以判断方法调用是否会导致堆栈溢出。

虽然您可以确定方法在堆栈上需要的数量,但这并不能告诉您实际需要的字节数。

Java 字节码与实际堆栈的抽象一起工作,其中堆栈被视为由抽象“插槽”组成。 this-reference、方法参数和局部变量都占用堆栈上的一个或两个槽(long 和 double 需要两个槽,其他都算作一个槽)。这就是您可以从类文件中获得的信息。

仍然缺少的是槽实际上是如何转换为堆栈内存的,以及 JIT 实际上从字节代码中创建了什么。 JIT 还不如决定在执行优化(例如代码不变移动)时添加临时变量。

此外,当您调用本地方法时,无法得知调用将占用多少堆栈内存。

你看,这在很大程度上取决于当前的 JRE、VM 和平台。再加上缺乏一个简单的内置方法来实际确定实际堆栈有多大,这使得确定需要多少堆栈和可用多少堆栈变得不切实际。

关于java - 函数的最大堆栈空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24308906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com