我见过JVM选项-XSS-它到底做什么?这个链接,但我的问题是这个选项怎么有用。
因为如果我们对-xss值设置一个最小的限制,线程可能无法正常工作,因为它可能在大多数情况下引发stackOverflow错误。
为什么这个值至少有64K限制?
我是如何获得这个64K限制的,当我试图在IntelliJ iDE上配置运行时vm选项时,我试图给出一些类似10K的东西,但它弹出这个错误,说明线程堆栈大小至少需要64K。
另一个问题是,如何从java程序中找到在嵌入式设备中运行的jvm的默认线程堆栈大小?
谢谢,
森
-xss
允许根据html" target="_blank">应用程序需要配置Java线程堆栈大小:
请记住,HotSpot JVM还将相同的Java线程堆栈用于本机方法和JVM运行时调用(例如,类加载)。这意味着Java线程堆栈不仅用于Java方法,而且JVM也应该为自己的操作保留一些堆栈页。
(StackYellowPages + StackRedPages + StackShadowPages + 2*BytesPerWord + 1) * 4096
哪里
StackYellowPages
和StackRedPages
来检测和处理StackOverflowError;StackShadowPages
是为本机方法保留的;例如。对于32位Windows JVM,最小堆栈大小=(3+1+4+2*4+1)*4K=68K
-XX:StackYellowPages=1 -XX:StackRedPages=1 -XX:StackShadowPages=1
我知道如何使用-Xss为java线程设置堆栈大小,我们在产品中使用它。 但是当我们的应用程序中使用了很多线程,并且设置了-Xss(我们设置为512k我们的使用)。我们会遇到错误报告无法创建新的本机线程。它应该与堆栈大小有关,因为当我们设置-Xss256k时,错误消失了。 我的问题是对于1个线程,Xss设置堆栈大小,但是对于所有线程,堆栈大小如何<整个线程的总堆栈内存大小的限制是什么?我没有发现这样
在堆上分配内存时,唯一的限制是可用RAM(或虚拟内存)。它产生Gb的内存。 那么,为什么堆栈大小如此有限(大约1 Mb)?什么技术原因阻止您在堆栈上创建真正大的对象? 更新:我的意图可能不清楚,我不想在堆栈上分配巨大的对象,也不需要更大的堆栈。这个问题只是纯粹的好奇心!
问题内容: 它在这里说-Xss用于“设置线程堆栈大小”,这到底是什么意思?谁能帮我理解这一点? 问题答案: Java应用程序中的每个线程都有其自己的堆栈。堆栈用于保存返回地址,函数/方法调用参数等。因此,如果线程倾向于通过递归算法处理大型结构,则所有这些返回地址等都需要大型堆栈。使用SunJVM,可以通过该参数设置该大小。
从文档中可以看出,-Xss用于设置JVM的堆栈大小。但我对这一说法感到非常困惑。 在Java中,每个线程都有自己的堆栈。-Xss指定的数字是否: > 线程的每个堆栈的大小。e、 如果将-Xss设置为256K,则每个线程将有一个256K大的堆栈。因此,10个线程将总共使用2560K。 非常感谢你。 编辑: 谢谢你的回答。看起来像是上面的(2)senario-Xss指定特定线程的最大堆栈大小。 然后我
我为我的Java web应用程序分配了一个最大值。由于一些内存泄漏,应用程序已经消耗了将近2 GB的分配内存。此时,我已经使用进行了内存转储。在一个实例中,堆转储大小接近>1.5GB,而在另一个实例中,堆转储大小<100 MB。这背后的原因是什么?
问题内容: JVM运行时数据区为每个正在执行的方法提供单独的堆栈。它包含操作数堆栈和局部变量。每次加载变量时,都需要先到操作数堆栈,然后再到局部变量。为什么不直接操作局部变量表,并进行一些看似重复的工作? 问题答案: 具有直接操作数的指令集必须对每个指令中的操作数进行编码。相反,对于使用操作数堆栈的指令集,操作数是隐式的。 当查看小的琐碎运算(例如将常量加载到变量中)时,隐式参数的优势并不明显。本