我对高级Java没有经验,所以请多多包涵。
我对 Java 实现可称为“自主”的功能的能力感到好奇。假设我们有两个 Java 程序正在运行。并且一个程序确定另一个程序正在占用内存,因此终止该程序和/或为 JVM 分配更多内存。
我知道在 Java 中您可以看到可用内存是多少(请参阅如何在 Java 中检查 CPU 和内存使用情况?),但是如果我们想更深入地挖掘呢?
谢谢你。
我对高级Java没有经验,所以请多多包涵。
我对 Java 实现可称为“自主”的功能的能力感到好奇。假设我们有两个 Java 程序正在运行。并且一个程序确定另一个程序正在占用内存,因此终止该程序和/或为 JVM 分配更多内存。
我知道在 Java 中您可以看到可用内存是多少(请参阅如何在 Java 中检查 CPU 和内存使用情况?),但是如果我们想更深入地挖掘呢?
谢谢你。
您问:-是否可以增加 JVM 的可用内存和/或杀死其他 Java 程序?
是的,有可能您可以增加jvm
like 的堆大小:
java -Xmx512M ClassName //512M = memory you want to increase
杀死一个进程,如: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);
欲了解更多信息,请查看此处。
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 应用程序自己的内存使用情况
关于您问题的“自主”部分,确实可以从 Java 中进行流程管理,尽管有限:
假设所有要管理的进程总是从你的 Java 应用程序中启动
ProcessBuilder.start()
,你可以destroy()
在你想杀死的进程上使用该方法。有关更多信息,请参阅此答案。
检测进程何时有太多内存意味着能够收集有关该进程的信息。问题是信息只能由操作系统访问。不可避免地,您必须使用某种命令或第三方工具来获取它。有关更多信息,请查看其他答案。
尽管相关性模糊,但关闭挂钩允许您在应用程序关闭时自动执行一些关键的工作。例如,保存/关闭任何打开的文档/文件。您可以在此相关答案中阅读更多内容。
希望有帮助。
您可以在尝试运行程序时尝试添加 -XmsMBm。例如 java -Xms64m 类名