Java 耗尽JVM内存

Java 耗尽JVM内存,java,memory,jvm,Java,Memory,Jvm,我正在测试一个监控应用程序运行状况的应用程序,其中一个决定因素是jvm内存。我很好奇,我怎样才能吃下去,这样我才能达到测试的门槛?这样行吗 ArrayList<Object> list = new ArrayList<Object>(); while(true){ list.add(new Object()); } ArrayList list=new ArrayList(); while(true){ 添加(新对象()); } 类似于在C中仔细检查应用程序内

我正在测试一个监控应用程序运行状况的应用程序,其中一个决定因素是jvm内存。我很好奇,我怎样才能吃下去,这样我才能达到测试的门槛?这样行吗

ArrayList<Object> list = new ArrayList<Object>();
while(true){
    list.add(new Object());
}
ArrayList list=new ArrayList();
while(true){
添加(新对象());
}

类似于在C中仔细检查应用程序内存,在这里我不断地处理事情?还是垃圾收集者会来帮我清理这些?还是我完全没有注意到

不,你没有错过目标。垃圾收集器将只收集您不再有引用的对象。在示例代码中,列表将始终在范围内,它引用的所有对象也在范围内,因此最终将填充堆并生成OutOfMemoryException


正如在评论中所说的,根据堆的大小,使用普通对象可能不是最好的方法。较大的对象或简单的原语数组将使您的生活更轻松。

也许您可以给出一个尝试。理论上,失败是不一定的,但在实践中,这足以消耗所有内存,但可能需要很长时间,因为单个对象很小。如果堆的大小为几gib,则可能会遇到以下问题:
ArrayList
不能容纳2个以上的对象。但是,只需将
newobject()
替换为,例如
newint[10000]
就可以解决这两个问题。