Clear unused object from memory
I have a set that contains millions of Strings and uses a lot of memory, the problem is that after I use it inside a foreach the memory used is not released, resulting after some executions of the method a java.lang.OutOfMemoryError
. How can I free the memory of this object? I've tried assigning it as null and running Runtime.getRuntime().gc;
, but it's not freeing up memory.
public void saveAllData(Set<String> logSet, RegexEnum regexEnum) {
Pattern dataPattern = Pattern.compile(regexEnum.getRegexPattern()[0]);
Pattern urlPattern = Pattern.compile(regexEnum.getRegexPattern()[1]);
Set<Log> logsToBeSaved = new HashSet<>();
for (String log : logSet) {
String data = getContentInLogLine(dataPattern, log, regexEnum.getGroupPattern()[0]);
String url = getContentInLogLine(urlPattern, log, regexEnum.getGroupPattern()[1]);
if (!StringUtils.isEmpty(data) && !StringUtils.isEmpty(url)) {
if (url.contains("?")) {
url = url.substring(0, url.indexOf("?"));
}
logsToBeSaved.add(new Log(data, "/".concat(url), regexEnum));
}
}
this.iLogRepository.saveAll(logsToBeSaved);
LOGGER.info("Cleaning log objects.");
logSet = null;
logsToBeSaved = null;
Runtime.getRuntime().gc();
}
0
1 answers
Try calling the clear () method from your Set, it would look something like:
public void saveAllData(Set<String> logSet, RegexEnum regexEnum) {
Pattern dataPattern = Pattern.compile(regexEnum.getRegexPattern()[0]);
Pattern urlPattern = Pattern.compile(regexEnum.getRegexPattern()[1]);
Set<Log> logsToBeSaved = new HashSet<>();
for (String log : logSet) {
String data = getContentInLogLine(dataPattern, log, regexEnum.getGroupPattern()[0]);
String url = getContentInLogLine(urlPattern, log, regexEnum.getGroupPattern()[1]);
if (!StringUtils.isEmpty(data) && !StringUtils.isEmpty(url)) {
if (url.contains("?")) {
url = url.substring(0, url.indexOf("?"));
}
logsToBeSaved.add(new Log(data, "/".concat(url), regexEnum));
}
}
this.iLogRepository.saveAll(logsToBeSaved);
LOGGER.info("Cleaning log objects.");
logSet.clear(); //Codigo implementado aqui
}
1
Author: Thiago Viana, 2020-03-14 17:00:48