小编Roh*_*rya的帖子

Java 8 到 Java 17 的迁移导致 Docker 容器内存显着增加

您能否帮助我们解答有关 ECS 中 Docker 容器中运行的 Java 8 Spring boot 应用程序的疑问?迁移到 Java 17 后,我们观察到与在 Java 8 上运行的容器的内存使用量相比,容器的内存使用量显着增加了 1GB(我们使用docker stats两个容器的命令比较了内存​​)。我们只有 Java 进程在容器内运行。jmap下面提供了 Java 8 和 Java 17 的命令输出。我们观察到的唯一重大变化是:

  1. 垃圾收集算法是 G1,与 Java 8 中的 CMS 相比,它现在是 Java 17 中的默认算法。
  2. 从 Java 8 中的 166.375MB增加到MaxNewSizeJava 17 中的 1228.0MB。

我们想知道这是否是 Docker 容器中内存使用量增加的原因。我们了解到,新的 G1 垃圾收集算法的内存使用量略高(从命令输出中发现,大约 120 MB,而 CMS 的内存使用量为 12 MB jcmd VM.native_memory),但我们没想到会出现如此剧烈的增加。关于这个问题的任何建议或见解将不胜感激。

Java 8 的 jmap 输出

using parallel threads in the new generation.
using thread-local object allocation. …
Run Code Online (Sandbox Code Playgroud)

garbage-collection heap-memory g1gc java-8 java-17

7
推荐指数
1
解决办法
5867
查看次数

Mapstruct - 忽略嵌套类中的特定字段

我需要一些帮助来使用 MapStruct 映射嵌套的 POJO。我需要跳过/忽略目标类中所有子类的特定字段。

例如,以下是我的目标 POJO

class FullCustomerInfo {

    UnitIdInfo unitIdInfo;
    CustomerIdInfo customerIdInfo;
    NameInfo nameInfo;
    CustomerTypeInfo customerTypeInfo;
    AddressInfo addressInfo;

}
Run Code Online (Sandbox Code Playgroud)

所有这些子类 - UnitIdInfo, CustomerIdInfo, NameInfo... 都包含一个字段“ fieldToIgnore”,我想在映射时忽略它。结构是这样的,这些类不共享包含此字段的公共基类 - “ fieldToIgnore”。

我创建的映射器如下所示:

@Mapper
public interface MapFullCustomer {

    @Mappings({
            @Mapping(target = "unitIdInfo.fieldToIgnore", ignore = true),
            @Mapping(target = "customerIdInfo.fieldToIgnore", ignore = true),
            @Mapping(target = "nameInfo.fieldToIgnore", ignore = true),
            @Mapping(target = "customerTypeInfo.fieldToIgnore", ignore = true),
            @Mapping(target = "addressInfo.fieldToIgnore", ignore = true)
    })
    public FullCustomerInfo map(SourceCustomerInfo sourceCustomerInfo);

}
Run Code Online (Sandbox Code Playgroud)

这有效。

但是,当子类的 …

java mapstruct

6
推荐指数
1
解决办法
513
查看次数