当前位置: 首页 > 面试题库 >

在运行时更新Java线程的堆栈大小

黎苑博
2023-03-14
问题内容

有谁知道是否有一种方法可以动态地(运行时)增加主线程的堆栈大小?另外,我相信这是同样的问题,是否可以Thread在实例化之后增加/更新a的堆栈大小?

Thread的CTOR允许定义其堆栈大小,但是我找不到任何更新方法。实际上,我没有在JDK中找到对堆栈大小的任何管理(这往往表明这是不可能的),一切都在VM中完成。

根据Java语言规范,可以在“创建堆栈时”设置堆栈大小,但需要注意以下几点:

Java虚拟机实现可以为程序员或用户提供对Java虚拟机堆栈的初始大小的控制,并且在动态扩展或收缩Java虚拟机堆栈的情况下,可以控制最大和最小大小。

IMO不是很清楚,这是否意味着某些VM处理具有在给定范围内变化的 最大(编辑)
堆栈大小的线程?我们可以用Hostpot做到这一点吗(我没有在Xss旁边找到任何与堆栈大小有关的选项)?

谢谢 !


问题答案:

堆栈大小在使用时会自动更新,因此您无需如此。

可以设置的最大大小可以使用。-Xss这是使用的虚拟内存大小,您可以在64位JVM上将其设置为任意大小。实际使用的内存取决于您使用的内存量。;)

编辑:重要的区别是最大大小保留为虚拟内存(堆btw也是如此)。即地址空间被保留,这也是为什么它不能扩展的原因。在32位系统中,地址空间有限,这仍然是一个问题。但是在64位系统中,您通常拥有最多256
TB的虚拟内存(处理器限制),因此虚拟内存很便宜。实际内存以页(通常为4
KB)分配,并且仅在使用时分配。这就是为什么即使在启动时分配了最大堆大小,Java应用程序的内存似乎也会随着时间增长的原因。线程堆栈也会发生同样的事情。仅分配实际触摸的页面。



 类似资料:
  • 本文向大家介绍Java 运行时堆栈机制,包括了Java 运行时堆栈机制的使用技巧和注意事项,需要的朋友参考一下 每次需要用Java运行进程,代码或线程时,都会创建运行时堆栈,以存储在执行线程时执行的操作。 运行时堆栈中的每个条目都称为堆栈帧或激活记录。流程调用函数后,将从运行时堆栈中删除其关联的数据。 一旦调用了所有函数,运行时堆栈将为空。这意味着需要将其从内存中删除。 此时,运行时堆栈被破坏,然

  • 我知道如何使用-Xss为java线程设置堆栈大小,我们在产品中使用它。 但是当我们的应用程序中使用了很多线程,并且设置了-Xss(我们设置为512k我们的使用)。我们会遇到错误报告无法创建新的本机线程。它应该与堆栈大小有关,因为当我们设置-Xss256k时,错误消失了。 我的问题是对于1个线程,Xss设置堆栈大小,但是对于所有线程,堆栈大小如何<整个线程的总堆栈内存大小的限制是什么?我没有发现这样

  • 问题内容: 我想知道是否有人可以指出有关解释用提取的Java线程堆栈的信息。 我的情况是我在GlassFish v2.1.1上运行了一个Java EE 5应用程序,该应用程序定期挂起(每天至少挂2次-3次)。要使其再次运行,我必须终止Glassfish进程并重新启动域。 。应用程序通常会变得越来越慢,直到最终完全挂起。一旦挂起,我将无法获得线程堆栈。我已经能够获得一个线程堆栈,因为它变得越来越慢,

  • 当我研究线程及其占用的内存(线程堆栈)时,我决定做一个简单的负载测试,看看线程的数量如何影响我的计算机上的RAM。 所以,在测试中,我使用了Tomcat,在设置中。xml将最小和最大web容器线程池设置为200。在那之后,我在将pool设置为2000时也做了同样的操作。我很震惊,因为内存占用没有差异(通过Windows任务管理器进行检查),而且几乎是一样的。所以我认为这些线程可能必须处于运行状态,

  • 问题内容: 大约一年前,我偶然发现了Java的一个不错的功能,我一生都找不到。 通过一些魔术接口,显然可以在运行时声明一些可替换的类或函数。 我找到了一个很好的示例指南,该人运行了一个简单的小程序,该程序打印了一条特定的消息,然后他使用一种我不记得的方法更新了该程序,然后突然该程序将旧的打印功能替换为新的打印功能。 我尝试浏览Java API来激发我的记忆力和谷歌搜索功能,但没有成功。有人可以帮忙

  • 本文向大家介绍深入JVM剖析Java的线程堆栈,包括了深入JVM剖析Java的线程堆栈的使用技巧和注意事项,需要的朋友参考一下 在这篇文章里我将教会你如何分析JVM的线程堆栈以及如何从堆栈信息中找出问题的根因。在我看来线程堆栈分析技术是Java EE产品支持工程师所必须掌握的一门技术。在线程堆栈中存储的信息,通常远超出你的想象,我们可以在工作中善加利用这些信息。 我的目标是分享我过去十几年来在线程