У меня есть вопрос об управлении памятью / утечках памяти, который я хотел бы уточнить.
Настройка:
Я тестирую некоторый код сервлета, который принимает ссылки на объекты HttpServletRequest и HttpResponse HttpServletRequest #getParameter (String), HttpServletRequest # getHeader (String) и HttpServletRequest # getAttribute (String).
Я пишу модульные тесты для кода сервлета.Чтобы разрешить тестирование, я создал заглушки для HttpServletRequest и HttpServletResponse, которые позволят проводить тестирование.Пример кода приведен ниже:
public final class HttpServletRequestStub implements HttpServletRequest {
private Map<String, String> parameterMap = new HashMap<String, String>();
private Map<String, String> headerMap = new HashMap<String, String>();
private Map<String, String> attributeMap = new HashMap<String, String>();
public void setParameter(String param, String value) {
this.parameterMap.put(param, value);
}
public void setHeader(String param, String value) {
this.headerMap.put(param, value);
}
@Override
public void setAttribute(String param, String value) {
this.attributeMap.put(param, value);
}
public void flush() {
this.parameterMap.clear();
this.headerMap.clear();
this.attributeMap.clear();
}
@Override
public String getParameter (String parameter) {
return this.parameterMap.get(parameter);
}
@Override
public String getHeader(String parameter) {
return this.headerMap.get(parameter);
}
@Override
public String getAttribute(String attribute) {
return this.attributeMap.get(attribute);
}
.... Other stubbed methods
}
В моем модульном тесте:
public class MyTest {
private MyServlet servlet;
private HttpServletRequest request;
private HttpServletResponse response;
@Before
public void setUp() throws Exception {
request = new HttpServletRequestStub();
response = new HttpServletResponseStub(); // Not in the sample code but implemented.
servlet = new MyServlet();
}
@After
public void tearDown() throws Exception {
request = null;
response = null;
servlet = null;
}
@Test
public void testFoo() throws Exception {
request.setParameter("foo", "bar");
request.setAttribute("attrib", "attrib");
request.setHeader("header", "header");
servlet.service(request, response);
}
}
Мой вопрос касается управления памятью.Необходимо ли мне очищать поддельный заголовок, содержимое карты запроса и атрибута после выполнения теста или это произойдет автоматически после того, как запрос, объекты ответа разыменовываются в моем методе разрыва (аннотированном @After)?Должен ли я вызывать метод flush явно в моем методе tear down, чтобы очистить ссылки на память?Я подумал, что мне может понадобиться настроить слабые ссылки для карт-заглушек, используя Weak HashMap вместо HashMap, но я не знаю, правильный ли это выбор.Я прочитал эту статью и до сих пор не ясно.Любая помощь будет полезна.
Спасибо,
Kartik