在Java中,是否可以增加JVM的可用内存和/或杀死其他Java程序?

我对高级Java缺乏经验,所以请耐心等待。

我很好奇Java能够实现可能被称为“自主”的function。 假设我们有两个Java程序在运行。 并且一个程序确定另一个程序占用内存,从而杀死该程序和/或为JVM分配更多内存。

我知道在Java中你可以看到可用内存是什么(请参阅如何检查Java中的CPU和内存使用情况? ),但是如果我们想深入挖掘怎么办?

谢谢。

你问: – 是否有可能增加JVM的可用内存和/或杀死其他Java程序?

  1. 是的可能您可以增加jvm的堆大小,如:

      java -Xmx512M ClassName //512M = memory you want to increase 
  2. 要杀死一个过程,例如: taskkill /F /IM .exe

注意
– >但这不是一个好主意,因为堆可能是固定大小的,也可能根据垃圾收集器的策略进行扩展。
– >打开你的命令提示符输入taskkill/? 了解细节。

3。 并且您可以通过这种方式检查jvm当前保留的总内存可用内存最大内存

  int MegaBytes = 1024*1024 ; long freeMemory = Runtime.getRuntime().freeMemory() / MegaBytes; long totalMemory = Runtime.getRuntime().totalMemory() / MegaBytes; long maxMemory = Runtime.getRuntime().maxMemory() / MegaBytes; System.out.println("Memory used by JVM: " + (maxMemory - freeMemory)); System.out.println("freeMemory in JVM: " + freeMemory); System.out.println("totalMemory in JVM : " + totalMemory); System.out.println("maxMemory in JVM: " + maxMemory); 

有关更多信息, 请查看此处 。

1.增加JVM的内存

您可以使用以下代码在Java中指定初始和最大堆大小。

 java -Xms64m -Xmx256m ... 

在这

 -Xms specifies the initial Java heap size -Xmx the maximum Java heap size. 

2.检查程序使用的内存容量

当您在计算机中安装jdk时,会有一个非常方便的工具,它显示了计算机中所有运行java程序的内存,堆空间。

Java Visual VM

http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/

你可以在你安装的jdk bin文件夹中找到它。

以前的stackoverflowpost也应该有助于监视Java应用程序自己的内存使用情况

关于问题的“自主”部分,确实可以在Java中进行流程管理,尽管有限:

  • 假设要使用ProcessBuilder.start()始终从Java应用程序中启动要管理的所有进程,则可以对要杀死的进程使用destroy()方法。 有关更多信息,请参阅此答案 。

  • 检测进程何时具有太多内存意味着能够收集有关该进程的信息。 问题是信息只能由操作系统访问。 不可避免地,你将不得不使用某种命令或第三方工具来获得它。 有关详细信息,请查看其他答案 。

  • 虽然模糊相关,但关闭挂钩允许您在应用程序关闭时自动执行一些关键任务。 例如,保存/关闭任何文档/文件保持打开状态。 您可以在此相关答案中阅读更多内容。

希望有所帮助。

尝试运行程序时,可以尝试添加-XmsMBm。 例如java -Xms64m ClassName