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

时间:2012-04-06 23:31:29

标签: java performance memory jvm

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

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

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

3 个答案:

答案 0 :(得分:5)

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

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

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

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

  • 减少线程数

  • 问题实际上是在其他地方而且你正在咆哮错误的树

答案 1 :(得分:0)

是的,当然它的生命规则将在最后一次出局,减少少量交换

答案 2 :(得分:0)

您使用了多少内存以及需要保存多少?

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

由于堆栈内存的使用“经常”,我认为它是一个糟糕的目标被换出。除非你正在处理一个内存受限的环境?