Java的JConsole可以用来自动配置内存吗?

Cof*_*fee 8 java jmx jconsole

我正在研究Java JMXJConsole.我很好奇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() );
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

是否有办法配置JConsole以防止此应用程序消耗X大量内存?或者我需要通过JMX创建一个新的MBean?谢谢

Mad*_*apu 3

有没有办法配置 JConsole 以防止此应用程序消耗 X 内存量?

从 JConsole 我们无法调整/控制内存限制。-Xmx我看到的唯一选项是在 java 进程启动期间使用。看下面的屏幕截图,JConsole 将内存参数公开为只读但不可写。

JConsole内存参数只读


或者我需要通过 JMX 创建一个新的 MBean 吗?

即使我们编写自己的 MBean,我也不认为可以在运行时更改 java 进程的内存限制。唯一的方法是在启动期间使用-Xms和配置内存限制-Xmx

除非问题特定于您的示例代码,否则您希望通过限制内存消耗来限制可以添加到 through 的元素数量VectorJMX Bean这是可行的,但我怀疑这是否就是您的意思寻找。