Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can Java';s JConsole是否可用于自动配置内存?_Java_Jmx_Jconsole - Fatal编程技术网

Can Java';s JConsole是否可用于自动配置内存?

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];

我正在学习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];
      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以指定您自己允许的最大堆大小(以兆字节为单位)。