我对高级Java并不熟悉,请耐心等待。
我很好奇Java是否有实现所谓“自动化”功能的能力。假设我们有两个正在运行的Java程序。如果一个程序确定另一个程序正在占用内存,那么它会终止该程序和/或为JVM分配更多内存。
我知道在Java中可以查看可用内存(参见如何在Java中检查CPU和内存使用情况?),但如果我们想深入了解呢?
谢谢。
我对高级Java并不熟悉,请耐心等待。
我很好奇Java是否有实现所谓“自动化”功能的能力。假设我们有两个正在运行的Java程序。如果一个程序确定另一个程序正在占用内存,那么它会终止该程序和/或为JVM分配更多内存。
我知道在Java中可以查看可用内存(参见如何在Java中检查CPU和内存使用情况?),但如果我们想深入了解呢?
谢谢。
你的问题是:是否有可能增加JVM的可用内存或终止其他Java程序?
是的,你可以增加JVM的堆大小,比如:
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 Visual VM
http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/
您可以在已安装的JDK bin文件夹中找到该工具。
此外,以下stackoverflow帖子也应该对您有所帮助 Monitoring own memory usage by Java application
ProcessBuilder.start()
在您的Java应用程序内启动的,您可以使用destroy()
方法来终止您想要杀死的进程。有关更多信息,请参见此答案。当您尝试运行程序时,可以尝试添加-XmsMBm参数。例如:java -Xms64m ClassName。