JVM分配的方式多于必要的?

时间:2013-12-09 16:11:11

标签: java ubuntu ram

我的java堆分配大约123 MB。我需要这个更少。我有1 GB的限制,运行的两个程序都是服务器。一个运行在953 MB。我试图运行的服务器JAR应该只占用10 MB或更少。我怎样才能让ubuntu像我测试JAR的其他操作系统一样响应? My code can be found at GitHub

Java版:JDK / JRE-7

1 个答案:

答案 0 :(得分:0)

当您通过top查看时,* nix上开箱即用的Java看起来有点吓人。 java可执行文件通常会在VIRT列下显示大量数字,例如900m。为什么我的小型Java程序使用 900m 的RAM?

实际上,它可能没有使用900米的RAM。 JVM告诉操作系统“我可能会使用这么多内存......做好准备”。但它可能实际上并没有在任何接近那么多物理RAM的地方使用 - 如果它是一个小程序,它将永远不会接近那个。任何物理RAM都不是实际使用的,它仍然可以自由地用于系统上的其他进程。

要更准确地了解java进程使用的物理RAM量,请查看top的{​​{1}}列。但是,对* nix内存管理和分析Java的完整讨论可能超出了这个答案的范围。我鼓励您尝试谷歌搜索主题,并根据您找到的材料开发具体问题。

大多数情况下,使用Java的默认内存设置,Java程序(以及与其一起运行的其他程序)都可以正常运行。有时您需要限制(或增加)允许JVM分配的最大堆内存量。这是最常调优的Java内存设置,通常使用RES命令行参数进行设置。您可以详细了解herehere

如果您的Java程序被神奇地启动,例如作为系统服务或某些较大的脚本的一部分,有时可能会有点难以找出修改java命令行选项的位置。谷歌搜索Xmx可能会让你开始修改该产品的java参数的传统方法。

例如Google搜索: ubuntu tomcat Xmx

提供指向-Xmx

方向的链接