首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >给jvm的线程堆栈大小选项(-Xss)是什么?为什么它在windows pc中有至少68k的限制?

给jvm的线程堆栈大小选项(-Xss)是什么?为什么它在windows pc中有至少68k的限制?
EN

Stack Overflow用户
提问于 2014-08-14 13:51:42
回答 1查看 6.4K关注 0票数 7

我见过JVM option -Xss - What does it do exactly?这个链接,但我的问题是这个选项如何有用。

因为,如果我们对-Xss值设置一个非常小的限制,那么线程可能无法正常工作,因为大多数情况下可能会引发stackOverflow错误。

为什么至少对于这个值有一个64k限制?

当我试图在IntelliJ iDE上配置运行时vm选项时,我是如何得到这个64k限制的,我试着给出一些东西,比如10k,它弹出了这个错误,说明它需要至少64k的线程堆栈大小。

另一个问题是,如何从java程序中找到在嵌入式设备中运行的jvm的默认线程堆栈大小?

谢谢,

Sen

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-14 22:43:53

-Xss允许根据应用程序的需要配置Java线程堆栈大小:

  • 较大的堆栈大小适用于使用递归算法或其他深度方法调用的应用程序;
  • 较小的堆栈大小适用于运行数千个线程的应用程序--您可能希望节省线程堆栈占用的内存。

请记住,Java还为本机方法和HotSpot运行时调用(例如类加载)使用了相同的Java线程堆栈。这意味着Java线程堆栈不仅用于Java方法,而且JVM也应该为自己的操作保留一些堆栈页面。

所需的最小堆栈大小由公式计算:

代码语言:javascript
运行
复制
(StackYellowPages + StackRedPages + StackShadowPages + 2*BytesPerWord + 1) * 4096

哪里

  • 需要StackYellowPagesStackRedPages来检测和处理StackOverflowError;
  • StackShadowPages是为本地方法保留的;
  • 2*4 (32位JVM)或2*8 (64位JVM)用于VM运行时函数;
  • 额外1用于主线程中的JIT编译器递归;
  • 4096是默认的页面大小。

例如,对于32位Windows,最小堆栈大小= (3 +1+4+ 2*4 + 1) * 4K = 68K

顺便说一句,您可以使用以下JVM选项来减小所需的最小堆栈大小:(不推荐!)

代码语言:javascript
运行
复制
-XX:StackYellowPages=1 -XX:StackRedPages=1 -XX:StackShadowPages=1
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25309748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档