我正在学习 Java JMX和 JConsole .我很好奇 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?谢谢
最佳答案
Would there be a way to configure JConsole to prevent this app from consuming X amount of memory?
我们无法从 JConsole 调整/控制内存限制。我看到的唯一选项是使用 -Xmx
在 java 进程启动期间。查看下面的屏幕截图,JConsole 将内存参数公开为仅可读但不可写。
Or do I need to make a new MBean via JMX ?
即使我们编写自己的 MBean,我也不认为可以在运行时更改 Java 进程的内存限制。唯一的方法是在启动期间使用 -Xms
配置内存限制。和 -Xmx
.
除非问题特定于您的示例代码,否则您希望限制可以添加到 Vector
的元素数量通过JMX Bean
并通过限制内存消耗,这是可行的,但我怀疑这是否是您正在寻找的。p>
关于java - Java的JConsole可以用来自动配置内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35713157/