Привет Пол (и привет всем)
Хочу поделиться недавним комментом из Merge Request, который будет интересен и тебе.
Кратко опишу задачу:
Мне нужно было слушать топик в Kafka, где могут быть сообщения, которые моей системе не нужно обрабатывать.
Для этой задачи я реализовал фильтр, давай посмотрим мой код ниже:
На самом деле весь код читать и понимать не нужно, нам интересен фидбек к конкретной строке:
Для начала давай разберемся, что же здесь происходит:
🔸 при конвертации в
🔸 т.к. количество вариантов
Я так и поступил.
Пол и все-все-все, что думаете, стоит ли так помогать GC?
Также мы будем рады увидеть в комментах другие способы оптимизации работы с памятью.
PS: Хотел бы поделиться ссылкой, в ней довольно подробно и с примерами уже описаны оптимизации и String Pool. Думаю, вы сможете за 10-15 минут получить неплохой базис, и, при необходимости, погрузиться в эту тему глубже.
#String
Хочу поделиться недавним комментом из Merge Request, который будет интересен и тебе.
Кратко опишу задачу:
Мне нужно было слушать топик в Kafka, где могут быть сообщения, которые моей системе не нужно обрабатывать.
Для этой задачи я реализовал фильтр, давай посмотрим мой код ниже:
@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> filterNonCurrentSourceSystemResponse(ConsumerFactory<String, String> consumerFactory) {
var factory = new ConcurrentKafkaListenerContainerFactory<String, String>();
factory.setConsumerFactory(consumerFactory);
factory.setRecordFilterStrategy(record -> {
var sourceSystemHeader = record.headers().lastHeader(KafkaConstants.SOURCE_SYSTEM_HEADER);
var sourceSystemHeaderValue = new String(sourceSystemHeader.value());
return !SourceSystemName.isCurrentSourceSystem(sourceSystemHeaderValue);
});
return factory;
}
На самом деле весь код читать и понимать не нужно, нам интересен фидбек к конкретной строке:
new String(sourceSystemHeader.value());
Для начала давай разберемся, что же здесь происходит:
🔸 sourceSystemHeader.value()
возвращает byte[]
🔸 при конвертации в
String
каждый раз будет создаваться новый объект в heap🔸 т.к. количество вариантов
SOURCE_SYSTEM_HEADER
сильно ограничено, возможно, для оптимизации работы с памятью стоит добавить интернирование в String Pool
Я так и поступил.
Пол и все-все-все, что думаете, стоит ли так помогать GC?
Также мы будем рады увидеть в комментах другие способы оптимизации работы с памятью.
PS: Хотел бы поделиться ссылкой, в ней довольно подробно и с примерами уже описаны оптимизации и String Pool. Думаю, вы сможете за 10-15 минут получить неплохой базис, и, при необходимости, погрузиться в эту тему глубже.
#String
🔥6✍2❤2👍2🤔1🗿1