Próbowałem używać Mockito do symulacji puli bazy danych (tylko do pobierania danych), ale podczas uruchamiania testu wydajności, który pobrał wiele próbnych połączeń przez pewien czas, zabrakło pamięci.Mockito rzuca OutOfMemoryError na prostym teście
Oto uproszczony, niezależny kod, który wyrzuca OutOfMemoryError po około 150 000 powtórzeń pętli na moim komputerze (mimo że nic nie wydaje się być zapisane globalnie i wszystko powinno być dostępne do zbierania śmieci). Co ja robię źle?
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();
}
}
Największą moją wykorzystanie pamięci zawsze dostaje to ~ 950 MB (mierzone [ 'Runtime. totalMemory'] (http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#totalMemory())). – Jeffrey
Ale dlaczego w ogóle powinien wykorzystywać jakąkolwiek pamięć? Nie tworzone są żadne globalne odwołania do utworzonych obiektów, a jednak po uruchomieniu GC nic nie jest gromadzone. – Tim
Mockito robi rzeczy za kulisami z wyśmiewanymi klasami. Zakładam, że w tym miejscu używana jest większość pamięci. – Jeffrey