【问题标题】:How to drain the java thread stack memory area?如何排空java线程栈内存区?
【发布时间】: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。

标签: java c memory-management operating-system jvm


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 2012-05-25
    • 2011-07-31
    • 1970-01-01
    相关资源
    最近更新 更多