Ich habe versucht, mit Mockito einen Datenbankpool zu simulieren (nur zum Abrufen von Daten), aber bei einem Leistungstest, der viele Scheinverbindungen über einen bestimmten Zeitraum hinweg abgerufen hat, war der Speicher knapp.Mockito löst einen OutOfMemoryError bei einem einfachen Test aus
Hier ist ein vereinfachter, in sich abgeschlossener Code, der nach etwa 150.000 Schleifendurchläufen auf meinem Rechner einen OutOfMemoryError auslöst (obwohl nichts global gespeichert zu sein scheint und alles Müll-sammelbar sein sollte). Was mache ich falsch? Diese
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();
}
}
Die höchste meine Speichernutzung je bekommt, ist ~ 950 MB (gemessen durch [ 'Runtime. totalMemory'] (http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#totalMemory())). – Jeffrey
Aber warum sollte überhaupt überhaupt Speicher verwendet werden? Es werden keine globalen Verweise auf erstellte Objekte erstellt, und dennoch wird beim Ausführen von GC nichts gesammelt. – Tim
Mockito macht Dinge hinter den Kulissen mit seinen verspotteten Klassen. Ich nehme an, dass dort der meiste Speicher verwendet wird. – Jeffrey