Java 减少堆栈大小以节省内存

标签 java performance memory jvm

我想减少 Java 应用程序的内存占用,以减少交换。我一直在考虑为此目的减少堆栈大小(Xss 参数),但不确定堆栈内存是如何分配的,以及每个线程的默认 512k(对于 32 位操作系统)是否始终位于常驻内存中,无论它有多少实际使用过。

减少堆栈内存会导致交换减少吗?

更新:请不要建议分析该应用程序 - 它已经完成了。

最佳答案

您正在运行多少个线程?即使有大量线程和非常大的堆栈大小(例如,10k 线程和 256KB 堆栈大小),也只有 2GB 的堆空间。

你说你正在 32 位 JVM 上运行,所以我认为这是一个相对较小的系统。您有几个选择:

  • 切换到 64 位 JVM。现在你有大量的地址空间,堆栈大小应该无关紧要

  • 您的机器太小。如果 2GB 的堆栈对于您的 10k+ 线程来说是个问题,那么您在太“小”的机器上运行的应用程序太大了。减少软件投入或购买更多硬件

  • 减少线程数

  • 问题实际上出在其他地方,而你找错了树

关于Java 减少堆栈大小以节省内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10050377/

相关文章:

java - 如何为 Spring Data JPA 查询设置默认架构名称?

java - 使用链式对象实现 HashTable

caching - 如何清除docker容器内的缓存

c++ - 与其他跨平台正则表达式库相比,Oniguruma 有多好?

python - 我应该像 C++ 一样优化我的 python 代码吗?有关系吗?

c# - 从内存中加载数据库文件

sql - 在不使用 R 内存的情况下从 dplyr 对象创建新的 SQL 表

java - 如何使用 Spring-Hateoas 获得 HAL 格式的响应

java - java中路径名前导反斜杠

c++ - 哪个更快? "vector of structs"还是 "a number of vectors"?