【问题标题】:Does the "Xss" option for the Hotspot JVM set the "initial stack size" which is fixed or the "maximum stack size" upto which the stack can grow?Hotspot JVM 的“Xss”选项是否设置了固定的“初始堆栈大小”或堆栈可以增长到的“最大堆栈大小”?
【发布时间】:2015-12-11 14:14:17
【问题描述】:

对于 Hotspot JVM,Xss 选项是否设置了始终固定在此大小的 初始堆栈大小?或者它是否设置了最大堆栈大小,以便堆栈最初以较小的大小开始,然后可以增长到设置的最大大小?

对于“堆大小”,这种行为非常明显,其中“Xms”设置初始堆大小,“Xmx”设置最大堆大小。但是“Xss”选项对我来说似乎并不清楚。

注意:我浏览了Dynamically expandable JVM stack 的帖子,但我无法从该帖子中得到明确的答案。

【问题讨论】:

    标签: java memory stack-overflow jvm-hotspot stack-size


    【解决方案1】:

    -Xss 设置初始线程堆栈大小(由操作系统特定算法调整)。

    例如看看linux implementation,第 4130-4151 行:

    -Xss 值被启动器放入变量ThreadStackSize。经过清理和舍入后,它通过JavaThread::set_stack_size_at_create 存储,稍后将在创建新的 Java 线程时用于调整堆栈的大小。

    不知道Hotspot是否实现了线程栈的动态扩展。

    【讨论】:

    • 感谢您的澄清。假设我的应用程序进程有 10 个线程,其中 9 个需要 128k,其中一个需要 1024k。理想情况下,2176k (128k * 9 + 1024k) 的堆栈内存足以满足此应用程序的需求。将 Xss 设置为 1024k 是否会在线程启动时保留 10 MB (1024k * 10) 的初始和固定堆栈内存,而实际上 2176k 就足够了?所以额外的 8064k 内存被浪费了,因为相同的内存可以用于其他目的,比如堆?
    • @SanjayBhat 是的,这似乎是可悲的后果
    猜你喜欢
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2010-11-24
    • 2011-08-01
    • 1970-01-01
    • 2015-11-22
    • 2011-12-05
    相关资源
    最近更新 更多