如何排空java线程栈内存区?

Posted

技术标签:

【中文标题】如何排空java线程栈内存区?【英文标题】:How to drain the java thread stack memory area? 【发布时间】:2013-12-20 10:53:06 【问题描述】:

在 C 语言中,我可以使用以下小程序耗尽堆栈内存区域(我的 Mac 中的堆栈大小限制为 8MB)

int main(int argc, const char **argv) int a[1024*1024*2]; 长尺寸 = sizeof(a); 返回0;

由于数组是java也是一个对象,所以它的元素存储在堆中。根据 Oracle's doc ,Mac 中默认线程栈大小为 512KB。是否有任何程序可以耗尽堆栈大小?

【问题讨论】:

你想引起堆栈溢出? void func() func(); 会做得很好。 public static void main(String[] args) main(args); ?如果您解释了您实际尝试完成的原因/内容,我们可能会帮助您提供一些在 Java 中更有用的东西。 我要做的是验证线程堆栈大小为 512KB。 【参考方案1】:

堆栈值只存在于创建它们的函数的范围内。一旦返回,它们就会被丢弃。

现在 Java 只在堆栈上存储原语。

因此,他们排空堆栈的唯一方法是创建原语。这是recursive method,那么我想您可能会在 ***Error 之前观察到一些流失。

【讨论】:

以上是关于如何排空java线程栈内存区?的主要内容,如果未能解决你的问题,请参考以下文章

java对象创建与内存模型总结

JVM笔记2-Java虚拟机内存管理简介

Java内存区域

Java8虚拟机内存模型

java里的静态变量是放在了堆内存还是栈内存

jvm内存模型中-栈,方法区,程序计数器是线程安全的