Can Java';s JConsole是否可用于自动配置内存?
我正在学习Java和Java。我对JConsole的内存管理能力很好奇。例如,内存选项卡中有一个“执行GC”按钮: 假设我有一个简单的Java应用程序,它会消耗内存,如下所示:Can Java';s JConsole是否可用于自动配置内存?,java,jmx,jconsole,Java,Jmx,Jconsole,我正在学习Java和Java。我对JConsole的内存管理能力很好奇。例如,内存选项卡中有一个“执行GC”按钮: 假设我有一个简单的Java应用程序,它会消耗内存,如下所示: public class MemoryEater { public static void main(String[] args) { Vector v = new Vector(); while (true) { byte b[] = new byte[1048576];
public class MemoryEater
{
public static void main(String[] args)
{
Vector v = new Vector();
while (true)
{
byte b[] = new byte[1048576];
v.add(b);
Runtime rt = Runtime.getRuntime();
System.out.println( "free memory: " + rt.freeMemory() );
}
}
}
是否有办法配置JConsole以防止此应用程序占用X
大量内存?或者我需要通过JMX创建一个新的MBean吗?谢谢
有没有办法配置JConsole来阻止此应用程序
消耗X内存量
在JConsole中,我们无法调整/控制内存限制。我看到的唯一选项是在java进程启动期间使用-Xmx
。查看下面的屏幕截图,JConsole只将内存参数公开为可读而不可写
或者我需要通过JMX创建一个新的MBean吗 即使我们编写自己的MBean,我也不认为在运行时改变java进程的内存限制是可能的。唯一的方法是在启动期间使用
-Xms
和-Xmx
配置内存限制
除非这个问题是针对您的示例代码的,否则您想通过
jmxbean
限制可以添加到向量中的元素的数量,并限制内存消耗,这是可以做到的,但我怀疑这是否是您想要的。不,您不能。Java内存管理是垃圾收集器和实际软件开发人员的责任。您可以使用不同的引用类型(如软引用)调整内存分配,调优GC参数和算法,或者尝试使用JMX或GC.run实用程序命令强制GC调用。但您不能为运行JVM改变内存边界,也不能为堆占用设置高水位线
如果您需要Java中的另一种内存管理策略,请查看像。这样的产品,您只能添加MBean函数并从JConsole-under operations中调用它们
public void add(){
byte b[] = new byte[1048576];
v.add(b);
Runtime rt = Runtime.getRuntime();
System.out.println( "free memory: " + rt.freeMemory() );
}
请参见此处您可以配置Java进程作为启动命令行选项可以消耗的内存量。我认为这在运行时是无法更改的。如果您担心JVM实例会占用您所有的操作系统内存,那么可以使用-Xmx64m限制JVM的堆大小,在这里您可以替换64m以指定您自己允许的最大堆大小(以兆字节为单位)。