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