当前位置: 首页 > 知识库问答 >
问题:

如何引流Java线程堆栈内存区域?

长孙作人
2023-03-14

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

int main(int argc, const char **argv) {
  int a[1024*1024*2];
  long size = sizeof(a);
  return 0;
}

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

共有1个答案

高英彦
2023-03-14

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

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

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

 类似资料:
  • 当我研究线程及其占用的内存(线程堆栈)时,我决定做一个简单的负载测试,看看线程的数量如何影响我的计算机上的RAM。 所以,在测试中,我使用了Tomcat,在设置中。xml将最小和最大web容器线程池设置为200。在那之后,我在将pool设置为2000时也做了同样的操作。我很震惊,因为内存占用没有差异(通过Windows任务管理器进行检查),而且几乎是一样的。所以我认为这些线程可能必须处于运行状态,

  • 问题内容: 我想知道是否有人可以指出有关解释用提取的Java线程堆栈的信息。 我的情况是我在GlassFish v2.1.1上运行了一个Java EE 5应用程序,该应用程序定期挂起(每天至少挂2次-3次)。要使其再次运行,我必须终止Glassfish进程并重新启动域。 。应用程序通常会变得越来越慢,直到最终完全挂起。一旦挂起,我将无法获得线程堆栈。我已经能够获得一个线程堆栈,因为它变得越来越慢,

  • 本文向大家介绍简述JAVA中堆内存与栈内存的区别,包括了简述JAVA中堆内存与栈内存的区别的使用技巧和注意事项,需要的朋友参考一下 Java把内存划分成两种:一种是栈内存,一种是堆内存。 一、栈内存       存放基本类型的变量,对象的引用和方法调用,遵循先入后出的原则。       栈内存在函数中定义的“一些基本类型的变量和对象的引用变量”都在函数的栈内存中分配。当在一段代码块定义一个变量时,

  • 问题内容: 是局部变量,将其存储在堆或堆栈中的何处? 问题答案: 在堆上。每当您用来创建对象时,它都会在堆上分配。

  • 本文向大家介绍Java中的堆栈和堆内存之间的区别,包括了Java中的堆栈和堆内存之间的区别的使用技巧和注意事项,需要的朋友参考一下 JVM将内存空间分为两部分,一个是堆栈,另一个是堆空间。堆栈空间主要用于存储方法执行的顺序和局部变量。 堆栈始终按照LIFO顺序存储块,而堆内存使用动态分配来分配和取消分配内存块。  分配给堆的内存将一直存在,直到发生以下事件之一: 程序终止  无记忆  相反,分配给

  • 问题内容: 在Java多线程中,术语和之间在语义上有区别吗? 问题答案: 每个线程都有自己的调用堆栈,“调用堆栈”和“线程堆栈”是同一件事。将其称为“线程堆栈”只是强调了调用堆栈特定于线程。 Bill Venners将此称为Java堆栈: 启动新线程时,Java虚拟机将为该线程创建一个新的Java堆栈。如前所述,Java堆栈将线程的状态存储在离散的帧中。Java虚拟机仅直接在Java堆栈上执行两项