首页 > 解决方案 > Java 11 类数据共享内存

问题描述

我正在尝试配置一些 Java 微服务以使用 Java 11 openjdk 中的类数据共享功能,以减少应用程序的内存占用。我的基本流程如下:

  1. 将出现在我的至少一定数量的微服务中的任何 JAR 从微服务 lib 文件夹移动到我机器上的单个“共享库”目录中。
  2. 运行一个虚拟程序,使用 -Xshare:dump 选项在共享库中的每个类上调用 class.forName()
  3. 在输出上运行cl4cds 工具,将之前的输出解析为必要的格式
  4. 运行另一个虚拟 java 程序来加载每个类并创建共享存档
  5. 使用 -Xshare:on 和一个以共享库开头的类路径启动每个微服务,然后是仍然保留在微服务的 lib 文件夹中的 jar。

当我启动微服务时,我使用 -Xlog:class+load=info:file=/loaded-from.txt 将类加载输出到日志文件。阅读这个文件,我可以看到大约 66% 的类是通过“共享对象”加载的,但我没有看到通过 top 命令或 /proc/pid/smaps 减少内存。

考虑到我能够在每个 80 种服务中共享大约 66% 的类,是否有理由不看到内存减少?

标签: javajvm

解决方案


推荐阅读