14

我对高级Java没有经验,所以请多多包涵。

我对 Java 实现可称为“自主”的功能的能力感到好奇。假设我们有两个 Java 程序正在运行。并且一个程序确定另一个程序正在占用内存,因此终止该程序和/或为 JVM 分配更多内存。

我知道在 Java 中您可以看到可用内存是多少(请参阅如何在 Java 中检查 CPU 和内存使用情况?),但是如果我们想更深入地挖掘呢?

谢谢你。

4

4 回答 4

11

您问:-是否可以增加 JVM 的可用内存和/或杀死其他 Java 程序?

  1. 是的,有可能您可以增加jvmlike 的堆大小:

          java -Xmx512M ClassName //512M = memory you want to increase
    
  2. 杀死一个进程,如:taskkill /F /IM <processname>.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);

欲了解更多信息,请查看此处

于 2013-06-20T05:01:13.913 回答
9

1.为JVM增加内存

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

java -Xms64m -Xmx256m ...

在这

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

2.检查程序使用了多少内存

当您在计算机中安装 jdk 时,会提供一个非常方便的工具,该工具会显示所有正在运行的 Java 程序在您的计算机中占用多少内存、堆空间。

Java 可视虚拟机

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

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

以前的 stackoverflow 帖子也应该有助于 监控 Java 应用程序自己的内存使用情况

于 2013-06-20T03:27:45.617 回答
4

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

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

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

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

希望有帮助。

于 2013-11-02T23:33:17.080 回答
1

您可以在尝试运行程序时尝试添加 -XmsMBm。例如 java -Xms64m 类名

于 2013-11-01T13:06:46.117 回答