Tôi đã thử sử dụng Mockito để mô phỏng một nhóm cơ sở dữ liệu (để lấy dữ liệu), nhưng khi chạy một thử nghiệm hiệu suất đã truy xuất nhiều kết nối mô phỏng trong một khoảng thời gian, nó hết bộ nhớ. Dưới đây là một mã độc lập đơn giản, mà ném một OutOfMemoryError sau khoảng 150.000 vòng lặp lặp trên máy tính của tôi (mặc dù không có gì dường như được lưu trên toàn cầu, và tất cả mọi thứ nên được thu gom rác). Lưu ý: Tôi đang làm gì sai?Mockito ném ra một OutOfMemoryError trên một thử nghiệm đơn giản
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();
}
}
Việc sử dụng bộ nhớ của tôi cao nhất từng được cho là ~ 950 MB (được đo bằng [ 'Runtime. totalMemory'] (http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#totalMemory())). – Jeffrey
Nhưng tại sao nó nên sử dụng hết bộ nhớ ngay từ đầu? Không có tham chiếu toàn cục nào cho các đối tượng đã tạo được tạo ra, và khi bạn chạy GC không có gì được thu thập. – Tim
Mockito đang làm những việc đằng sau hậu trường với các lớp được mô phỏng của nó. Tôi cho rằng đó là nơi hầu hết bộ nhớ đang được sử dụng. – Jeffrey