【发布时间】:2013-06-30 12:47:54
【问题描述】:
我尝试使用 Mockito 来模拟数据库池(仅用于检索数据),但是在运行在一段时间内检索到许多模拟连接的性能测试时,内存不足。
这是一个简化的自包含代码,它在我的机器上进行了大约 150,000 次循环迭代后抛出 OutOfMemoryError(尽管似乎没有全局保存任何内容,并且所有内容都应该是可回收的)。我做错了什么?
import static org.mockito.Mockito.when;
import java.sql.Connection;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
public class Test1 {
static class DbPool {
public Connection getConnection() {return null;}
}
@Mock
private DbPool dbPool;
@Mock
private Connection connection;
public Test1() {
MockitoAnnotations.initMocks(this);
when(dbPool.getConnection()).thenReturn(connection);
for(int i=0;i<1000000;i++) {
dbPool.getConnection();
System.out.println(i);
}
}
public static void main(String s[]) {
new Test1();
}
}
【问题讨论】:
-
我的内存使用量最高约为 950 MB(由
Runtime.totalMemory测量)。 -
但是为什么它首先会用完任何内存呢?不会创建对已创建对象的全局引用,但是当您运行 GC 时,不会收集任何内容。
-
Mockito 使用其模拟类在幕后做事。我认为这是使用大部分内存的地方。
标签: java mockito heap-memory