我想减少 Java 应用程序的内存占用,以减少交换。我一直在考虑为此目的减少堆栈大小(Xss 参数),但不确定堆栈内存是如何分配的,以及每个线程的默认 512k(对于 32 位操作系统)是否始终位于常驻内存中,无论它有多少实际使用过。
减少堆栈内存会导致交换减少吗?
更新:请不要建议分析该应用程序 - 它已经完成了。
最佳答案
您正在运行多少个线程?即使有大量线程和非常大的堆栈大小(例如,10k 线程和 256KB 堆栈大小),也只有 2GB 的堆空间。
你说你正在 32 位 JVM 上运行,所以我认为这是一个相对较小的系统。您有几个选择:
切换到 64 位 JVM。现在你有大量的地址空间,堆栈大小应该无关紧要
您的机器太小。如果 2GB 的堆栈对于您的 10k+ 线程来说是个问题,那么您在太“小”的机器上运行的应用程序太大了。减少软件投入或购买更多硬件
减少线程数
问题实际上出在其他地方,而你找错了树
关于Java 减少堆栈大小以节省内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10050377/