我希望减少Java应用程序的内存占用,以减少交换。为此我一直在考虑减少堆栈大小(Xss参数),但不确定如何分配堆栈内存以及每个线程的默认512k(对于32位操作系统)是否始终位于驻留内存中,无论其多少实际使用过。
减少堆栈内存会导致交换减少吗?
更新:请不要建议对应用程序进行概要分析 - 它已经完成。
答案 0 :(得分:5)
您运行了多少个线程?即使有大量的线程和非常大的堆栈大小(比如10k线程和256KB堆栈大小),只有2GB的堆空间。
你说你在32位JVM上运行,所以我认为这是一个相对较小的系统。您有几个选择:
切换到64位JVM。现在你有大量的地址空间,堆栈大小应该是无关紧要的
您的机器太小了。如果2kb的堆栈对于你的10k +线程来说是个问题,那么你在“小”的机器上运行的应用程序太“太大了”。少做软件或购买更多硬件
减少线程数
问题实际上是在其他地方而且你正在咆哮错误的树
答案 1 :(得分:0)
是的,当然它的生命规则将在最后一次出局,减少少量交换
答案 2 :(得分:0)
您使用了多少内存以及需要保存多少?
由于每个线程的堆栈只有512K,这意味着您需要200个线程才能开始输入值得保存的值(100Mb)
由于堆栈内存的使用“经常”,我认为它是一个糟糕的目标被换出。除非你正在处理一个内存受限的环境?