我正在研究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?感谢
答案 0 :(得分:3)
是否有办法配置JConsole以阻止此应用程序 消耗X量的内存?
从JConsole我们无法调整/控制内存限制。我看到的唯一选项是在启动java进程期间使用-Xmx
。查看下面的屏幕截图,JConsole将内存参数公开为可读但不可写。
或者我是否需要通过JMX创建一个新的MBean?
即使我们编写自己的MBean,我也不认为可以在运行时更改java进程的内存限制。唯一的方法是使用-Xms
和-Xmx
在启动期间配置内存限制。
除非问题特定于您的示例代码,否则您希望限制可添加到Vector
到JMX Bean
的元素数量,并限制内存消耗,这是可以,但我怀疑这是否是你正在寻找的。 p>
答案 1 :(得分:0)
如果您需要另外的Java内存管理策略,请查看Terracotta BigMemory等产品。
答案 2 :(得分:0)
你只能添加MBean函数并在JConsole中调用它们 - 在操作下。
public void add(){
byte b[] = new byte[1048576];
v.add(b);
Runtime rt = Runtime.getRuntime();
System.out.println( "free memory: " + rt.freeMemory() );
}
见https://docs.oracle.com/javase/tutorial/jmx/mbeans/standard.html