I have seen JVM option -Xss - What does it do exactly? this link, but my question is how is this option useful.
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.
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.
Another question is that, how to find the default thread stack size of my jvm running in my embedded device from a java program?
Thanks,
Sen
Default Stack Size for JVM Internal Threads The default system stack size is 256 KB on all platforms. Note: The -Xss command line option sets the stack size of both application threads and JVM internal threads.
Sets the maximum stack size for Java™ threads. To increase the maximum number of threads your system can support, reduce the maximum native stack size. -Xss <size> The default is 320 KB for 31-bit or 32-bit VMs and 1024 KB for 64-bit VMs.
Sets the maximum stack size for Java™ threads. -Xss <size> The default is 320 KB for 31-bit or 32-bit JVMs and 1024 KB for 64-bit JVMs. The maximum value varies according to platform and specific machine configuration.
In Java SE 6, the default on Sparc is 512k in the 32-bit VM, and 1024k in the 64-bit VM. ... You can reduce your stack size by running with the -Xss option. ... 64k is the least amount of stack space allowed per thread.
-Xss
allows to configure Java thread stack size according to application needs:
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
where
StackYellowPages
and StackRedPages
are required to detect and handle StackOverflowError;StackShadowPages
are reserved for native methods;E.g. for 32-bit Windows JVM minimum stack size = (3 + 1 + 4 + 2*4 + 1) * 4K = 68K
BTW, you may reduce the minumum required stack size using these JVM options: (not recommended!)
-XX:StackYellowPages=1 -XX:StackRedPages=1 -XX:StackShadowPages=1
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With