JVM优化系列之一(-Xss调整Stack Space的大小)

Posted duanxz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM优化系列之一(-Xss调整Stack Space的大小)相关的知识,希望对你有一定的参考价值。

Java程序中,每个线程都有自己的Stack Space(堆栈)。这个Stack Space不是来自Heap的分配。所以Stack Space的大小不会受到-Xmx和-Xms的影响,这2个JVM参数仅仅是影响Heap的大小。

Stack Space用来做方法的递归调用时压入Stack Frame(栈帧)。所以当递归调用太深的时候,就有可能耗尽Stack Space,爆出StackOverflow的错误。

-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆 栈大小为1M,以前每个线程堆栈大小为256K。根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一 个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

线程栈的大小是个双刃剑,如果设置过小,可能会出现栈溢出,特别是在该线程内有递归、大的循环时出现溢出的可能性更大,如果该值设置过大,就有影响到创建栈的数量,如果是多线程的应用,就会出现内存溢出的错误.

以上是关于JVM优化系列之一(-Xss调整Stack Space的大小)的主要内容,如果未能解决你的问题,请参考以下文章

系统jvm的stack空间占满了,爆出了stackOverflow异常,修改-Xss512k 参数来解决

ElasticSearch优化系列七:优化建议

如何调优JVM - 优化Java虚拟机(大全+实例)

记录一次JVM配置优化的案例

分布式技术专题「系统服务优化系列」Web应用服务的性能指标优化开发指南(JVM篇)

JVM系列之:再谈java中的safepoint