如何优化JVM的内存使用情况?

问题描述:

我想问问这里的任何人是否知道如何优化JVM的内存使用情况? 我们使用调用JVM的Java服务包装器(YAJSW),物理内存使用量约为40MB。我想减轻这个让我们说5-10MB。我如何实现这一目标?如何优化JVM的内存使用情况?

到目前为止,我只具有以下配置:

java =-Xmx1024m

我也试过这样:

java =-Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:SurvivorRatio=2 -XX:PermSize=256m -XX:MaxPermSize=256m

但是这些配置设置并没有区别的。什么是这个正确的配置设置?或者,我还需要做些什么来优化?

预先感谢您的回答。

+0

你提供的数字有点奇怪......你说你想把内存使用量减少到5-10 MB,并且你把它设置得更多(堆1G,PermSize 256M)。 – Grooveek 2011-06-01 08:08:29

+0

我真的不知道使用正确的参数。如果我减小堆大小,则由服务封装的应用程序可能会受到影响。无论如何,你是否建议我减小堆大小和PermSize?这些可容忍的价值是什么? (堆为512,PermSize为64) – fleur 2011-06-01 08:26:48

+0

我看不出任何提供的选项应该如何影响最小内存使用量?我会尝试像-XX:+ UseCompressedStrings或-XX:+ UseCompressedOops(在64位虚拟机上) - 实际上,如果内存很重要,我希望你使用的是32位虚拟机,所以第二个虚拟机应该没有帮助。 – Voo 2011-06-01 19:50:16

你说的是常驻记忆还是虚拟的?在我的机器上,简单的while(true);main没有任何东西已经让我获得了10 MB的驻留内存,主要是因为内存映射的r/o库(libc,libm,librt,libpthread ...)和jar。如果可能的话,尽可能减少内存占用量,或者在任何非平凡的应用程序中减少到10 MB,这只会意味着更多的分页,从而降低速度。

另一方面,虚拟内存在我的机器上为1.1 GB,如果需要可以减少虚拟内存,但为什么这么做呢?未使用的虚拟内存并不真正花费任何东西。

编辑:除此之外,你可能想看看其他HotSpot VM Options,特别是MaxHeapFreeRatio。

+0

是的,我在谈论常驻记忆。我尝试了MaxHeapFreeRatio,到目前为止,我还没有看到任何区别。但是,感谢您的链接:) – fleur 2011-06-02 04:07:40

+0

如果您关心10MB的常驻内存使用情况,是否意味着您同时运行大量应用程序实例?如果是的话,也许,你应该考虑切换到一个应用程序不断在内存中服务很多客户? – 2013-06-18 15:06:54

documentation for YAJSW状态:

包装内存的要求
YAJSW的灵活性是有代价的。将java用于包装过程有许多优点。但是,我们支付更高内存占用的java价格。 JSW包装只需要几K内存,而YAJSW的最小虚拟内存需求是90 MB和40 MB物理内存。该值根据操作系统和功能而变化。

如果您的应用程序可以在32位内存限制内运行,那么可以使用community edition of Tanuki,因为它的占位面积较小。