What is thread stack size option(-Xss) given to jvm? Why does it have a limit of atleast 68k in a windows pc?(给 jvm 的线程堆栈大小选项(-Xss)是什么?为什么它在 Windows pc 中至少有 68k 的限制?)
问题描述
我见过 JVM 选项 -Xss - 它究竟做了什么? 这个链接,但我的问题是这个选项有什么用处.
I have seen JVM option -Xss - What does it do exactly? this link, but my question is how is this option useful.
因为,如果我们为 -Xss 值设置一个非常小的限制,则线程可能无法正常工作,因为它可能会在大多数情况下抛出 stackOverflow 错误.
Because, if we set a very minimum limit to the -Xss value, maybe the threads are not going to work properly as it may throw stackOverflow error most of the times.
为什么这个值至少有 64k 个限制?
我如何得到这个 64k 限制是当我试图在 IntelliJ iDE 上配置运行时 vm 选项时,我试图给出 10k 之类的东西,它弹出了这个错误,指出它需要至少 64k 的线程堆栈大小.
Why is there a 64k limit at least for this value?
How i got this 64k limit is when i was trying to configure the runtime vm options on the IntelliJ iDE, I tried to give some thing like 10k and it popped up this error stating it needs at least 64k for thread stack size.
另一个问题是,如何从 java 程序中找到在我的嵌入式设备中运行的 jvm 的默认线程堆栈大小?
Another question is that, how to find the default thread stack size of my jvm running in my embedded device from a java program?
谢谢,
森
推荐答案
-Xss
允许根据应用需要配置Java线程栈大小:
-Xss
allows to configure Java thread stack size according to application needs:
- 较大的堆栈大小适用于使用递归算法或其他深度方法调用的应用程序;
- 较小堆栈大小适用于运行数千个线程的应用程序 - 您可能希望节省线程堆栈占用的内存.
- larger stack size is for an application that uses recursive algorithms or otherwise deep method calls;
- smaller stack size is for an application that runs thousands of threads - you may want to save memory occupied by thread stacks.
请记住,HotSpot JVM 还为本地方法和 JVM 运行时调用(例如类加载)使用相同的 Java 线程堆栈.这意味着 Java 线程堆栈不仅用于 Java 方法,而且 JVM 也应该为自己的操作保留一些堆栈页面.
Bear in mind that HotSpot JVM also utilizes the same Java thread stack for the native methods and JVM runtime calls (e.g. class loading). This means Java thread stack is used not only for Java methods, but JVM should reserve some stack pages for its own operation as well.
所需的最小堆栈大小由以下公式计算:
The minimum required stack size is calculated by the formula:
(StackYellowPages + StackRedPages + StackShadowPages + 2*BytesPerWord + 1) * 4096
在哪里
StackYellowPages
和StackRedPages
是检测和处理 StackOverflowError 所必需的;StackShadowPages
为本地方法保留;- 2*4(32 位 JVM)或 2*8(64 位 JVM)用于 VM 运行时函数;
- extra 1 用于主线程中的 JIT 编译器递归;
- 4096 是默认页面大小.
StackYellowPages
andStackRedPages
are required to detect and handle StackOverflowError;StackShadowPages
are reserved for native methods;- 2*4 (32-bit JVM) or 2*8 (64-bit JVM) is for VM runtime functions;
- extra 1 is for JIT compiler recursion in main thread;
- 4096 is the default page size.
例如对于 32 位 Windows JVM 最小堆栈大小 = (3 + 1 + 4 + 2*4 + 1) * 4K = 68K
E.g. for 32-bit Windows JVM minimum stack size = (3 + 1 + 4 + 2*4 + 1) * 4K = 68K
顺便说一句,您可以使用这些 JVM 选项减少所需的最小堆栈大小:(不推荐!)
BTW, you may reduce the minumum required stack size using these JVM options: (not recommended!)
-XX:StackYellowPages=1 -XX:StackRedPages=1 -XX:StackShadowPages=1
这篇关于给 jvm 的线程堆栈大小选项(-Xss)是什么?为什么它在 Windows pc 中至少有 68k 的限制?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:给 jvm 的线程堆栈大小选项(-Xss)是什么?为什么它在 Windows pc 中至少有 68k 的限制?
基础教程推荐
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01