Ho provato a utilizzare Mockito per simulare un pool di database (solo per il recupero dei dati), ma durante l'esecuzione di un test delle prestazioni che recuperava molte connessioni di simulazione in un periodo di tempo, la memoria era esaurita.Mockito lancia un OutOfMemoryError su un semplice test
Ecco un codice autonomo semplificato, che genera un OutOfMemoryError dopo circa 150.000 iterazioni di loop sulla mia macchina (nonostante ciò non sembra essere salvato globalmente, e tutto dovrebbe essere garbage collectable). Che cosa sto facendo di sbagliato?
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();
}
}
Il più alto il mio utilizzo della memoria ottiene mai è ~ 950 MB (come misurato da [ 'Runtime. totalMemory'] (http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#totalMemory())). – Jeffrey
Ma perché dovrebbe usare del tutto la memoria, in primo luogo? Non vengono creati riferimenti globali agli oggetti creati, eppure quando si esegue GC non viene raccolto nulla. – Tim
Mockito sta facendo le cose dietro le quinte con le sue classi derise. Presumo che è dove viene utilizzata la maggior parte della memoria. – Jeffrey