Возможно, что при получении сообщений от Kafka, когда я создаю пустую карту с помощью Map.of(), я могу вызвать утечку памяти или более интенсивное использование процессора?
Прослушивателей может быть несколько, но есть два типа: один получает заголовки:
@KafkaListener(...)
public void processMessage(String message,
ConsumerRecordMetadata metadata,
@Header(name = ID, required = false) String id,
@Header(name = TIME, required = false) String time) {
var headers = Map.of(ID, id, TIME, time);
...
}
и еще один, где нет заголовков:
@KafkaListener(...)
public void processMessage(String message,
ConsumerRecordMetadata metadata) {
var headers = Map.of();
...
}
А затем на более абстрактном уровне я проверяю, есть ли заголовки или нет, но я думаю, что это не так - как указано в заголовке, существует ли вероятность того, что если трафик сообщений увеличится, процессор может быть ограничен?
И да, это происходит :|
Map.of является синглтоном и не размещает в куче более одного экземпляра.
Если вы считаете, что в Java есть утечка памяти, гораздо более вероятно, что вы непреднамеренно удерживаете ссылки. Если все, что вы делаете, это создаете эту карту, проверяете ее, а затем отбрасываете, вы не будете удерживать ссылку.
Существуют инструменты (профилировщики памяти), которые можно использовать для поиска утечек памяти. Если вы подозреваете, что у вас есть утечка, воспользуйтесь одним из этих инструментов, чтобы выявить проблему, а не делайте поспешных выводов.




Нет никаких оснований полагать, что пустая карта может привести к утечке памяти больше, чем та, которая содержит данные.
Утечка памяти также не приводит к регулированию процессора напрямую (использование всей кучи, поэтому утечки могут в конечном итоге привести к этому).
Прежде чем делать поспешные выводы, вам следует оценить проблему.
Проверьте статистику GC, чтобы увидеть, увеличивается ли когда-либо ваша память или есть ли у вас другие проблемы с циклами GC, тогда вы можете попытаться определить причину проблемы.
Нет,
Map.of— это не утечка памяти. Это будет довольно серьезная проблема, хотя пустая карта настолько мала, что вы потеряете пару миллионов, прежде чем увидите результат. Как вы думаете, почему это утечка памяти? Какое это имеет отношение к дросселированию процессора? Чего нет в названии.