减少Java进程的内存使用

时间:2011-03-04 08:23:46

标签: java .net memory

我在c#NET中编写了一个包装器应用程序,它在.jar文件运行时运行,在.jar文件关闭时关闭等等。这基本上是为了让我们的Web面板能够查询可执行文件以查找如果它实际上是否正在运行。

我已经看到了一些专门用于此软件的其他面板,可以选择在没有人连接时减少它的内存使用量。 java应用程序(Minecraft)基本上根据玩家世界的大小来缩放RAM使用量,而不是连接多少玩家。当没有人连接时,减少使用量应该是完全正常的。

对于Java应用程序,有没有办法以编程方式从C#NET减少RAM使用?

2 个答案:

答案 0 :(得分:1)

没有

为什么不呢?因为您无法以这种方式控制Java程序,原因有两个:

  • 您无法控制JRE对其内存的影响以及GC的工作方式。
  • 如果minecraft.jar请求512MiB的RAM,他将获得512MiB的RAM。您不能只在应用程序上全部Hey, there's no one connected so I disallow you to allocate memory。我的意思是,你可以......但我不认为你想要那个(这会引发异常和奇怪的副作用)。

编辑:实现此行为的唯一简单方法是更改​​程序。由于Minecraft不是免费/开源软件,因此您唯一能做的就是提交错误/功能请求。甚至可能有关于如何实现更好的内存使用的扩展信息和布局概念。

我的意思是,我很确定通过Java程序大量使用反射也可以实现这一点......但事情从那里开始走下坡路。

答案 1 :(得分:1)

AFAIK,没有办法告诉JVM将常规堆内存返回给操作系统...除了告诉它完全退出。