У меня есть приложение Java REST, где одна конечная точка всегда имеет дело с ConcurrentMap
.Я делаю нагрузочные тесты, и это очень плохо, когда нагрузочный тест начинает увеличиваться.
Какие стратегии я могу реализовать, чтобы повысить эффективность приложения?
Должен ли я играть сJetty темы, как сервер я использую?Или это в основном код?Или и то, и другое?
Ниже описан метод, который становится узким местом.
В основном мне нужно прочитать какую-то строку из данного файла.Я не могу сохранить его в БД, поэтому я придумал эту обработку с картой.Тем не менее, я знаю, что для больших файлов потребуется не только длительное время, и я рискую тем, что Карта будет занимать много памяти, когда в ней много записей ...
dict
ConcurrentMap
.
public String getLine(int lineNr) throws IllegalArgumentException {
if (lineNr > nrLines) {
throw new IllegalArgumentException();
}
if (dict.containsKey(lineNr)) {
return dict.get(lineNr);
}
synchronized (this) {
try (Stream<String> st = Files.lines(doc.toPath())
Optional<String> optionalLine = st.skip(lineNr - 1).findFirst();
if (optionalLine.isPresent()) {
dict.put(lineNr, optionalLine.get());
} else {
nrLines = nrLines > lineNr ? lineNr : nrLines;
throw new IllegalArgumentException();
}
} catch (IOException e) {
e.printStackTrace();
}
return cache.get(lineNr);
}