gpt4 book ai didi

Java线程栈内存占用

转载 作者:行者123 更新时间:2023-11-28 22:19:40 24 4
gpt4 key购买 nike

当我研究线程和它们消耗的内存(线程堆栈)时,我决定做一个简单的负载测试,看看线程数如何影响我计算机上的 RAM。

因此,为了测试我使用了 Tomcat,并在 settings.xml 中设置最小和最大网络容器线程池设置为 200。之后我在将池设置为 2000 时做了同样的事情。我很震惊,因为内存占用没有差异(正在检查Windows 任务管理器),它几乎是一样的。所以我想也许那些线程有处于运行状态,使用负载测试工具“轰炸”服务器,我已经成功了做一些重负载,大部分线程现在处于运行状态,但没有200 到 2000 个线程之间内存消耗的变化。

所以我想知道这个线程的堆栈内存到底是什么,这些结果意味着什么创建线程时未分配线程堆栈上的内存?我会怎样能够模拟线程堆栈内存增长到 RAM 消耗差异的大小是在图表上用“肉眼”看到的吗?

提前致谢!

最佳答案

线程栈分配在本地内存中(不在Java堆中),默认栈大小在256k到1M之间(取决于OS和JVM是32位还是64位),你可以控制使用 -Xss JVM 选项。如果堆栈内存用完,则会出现“java.lang.OutOfMemoryError:无法创建新的 native 线程”错误。

如果您想在操作系统级别跟踪 Windows 上的堆栈内存使用情况,请使用 VMMap而不是任务管理器,因为它会向您显示堆栈内存。

如果你有一个带有 -XX:NativeMemoryTracking 和 jcmd 的最新 JDK,你还可以在 Java 中跟踪堆栈内存使用情况,详细信息是 here .

我不知道你的测试有什么问题,我建议在你的代码中放置一个 Thread.sleep 以确保所有线程都在运行。

关于Java线程栈内存占用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26585584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com