0

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

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

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

4

3 回答 3

5

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

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

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

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

  • 减少线程数

  • 问题实际上出在其他地方,而您正在吠叫错误的树

于 2012-04-07T00:13:03.903 回答
0

您正在使用多少内存,需要节省多少内存?

由于每个线程的堆栈只有 512K,这意味着您需要 200 个线程才能开始输入一个可能值得保存的值 (100Mb)

由于堆栈内存的使用会“非常频繁”,因此我认为它是被换出的糟糕目标。除非您正在处理内存受限的环境?

于 2012-04-07T00:10:44.977 回答
0

是的,当然它的后进先出规则,少堆栈少交换

于 2012-04-06T23:59:19.450 回答