创建许多空映射时导致 Java 内存泄漏

问题描述 投票:0回答:1

在接收来自 Kafka 的消息期间,当我使用

Map.of()
创建空映射时,可能会导致内存泄漏或更密集的 CPU 使用?

可以有多个侦听器,但有两种类型 - 一种接收标头:

    @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();
        ...
}

然后在更抽象的层面上,我检查是否有标头,但我认为情况并非如此 - 正如标题所示,是否有可能如果消息流量增加,CPU 可能会受到限制?

是的,这正在发生:|

java spring memory apache-kafka cpu
1个回答
0
投票

没有理由相信一个空的 Map 可能会导致不止一个保存数据的内存泄漏。

内存泄漏也不会直接导致 cpu 节流(耗尽所有堆内存,因此泄漏最终会导致这种情况)。

您应该在得出结论之前评估问题。

检查 GC 统计数据,看看您的内存是否曾经增加,或者如果您有 GC 周期的其他问题,那么您可以尝试找出问题的原因。

© www.soinside.com 2019 - 2024. All rights reserved.