java - Java 11 类数据共享内存
问题描述
我正在尝试配置一些 Java 微服务以使用 Java 11 openjdk 中的类数据共享功能,以减少应用程序的内存占用。我的基本流程如下:
- 将出现在我的至少一定数量的微服务中的任何 JAR 从微服务 lib 文件夹移动到我机器上的单个“共享库”目录中。
- 运行一个虚拟程序,使用 -Xshare:dump 选项在共享库中的每个类上调用 class.forName()
- 在输出上运行cl4cds 工具,将之前的输出解析为必要的格式
- 运行另一个虚拟 java 程序来加载每个类并创建共享存档
- 使用 -Xshare:on 和一个以共享库开头的类路径启动每个微服务,然后是仍然保留在微服务的 lib 文件夹中的 jar。
当我启动微服务时,我使用 -Xlog:class+load=info:file=/loaded-from.txt 将类加载输出到日志文件。阅读这个文件,我可以看到大约 66% 的类是通过“共享对象”加载的,但我没有看到通过 top 命令或 /proc/pid/smaps 减少内存。
考虑到我能够在每个 80 种服务中共享大约 66% 的类,是否有理由不看到内存减少?
解决方案
推荐阅读
- json - 将多个文件从一个文件夹复制到同一个 S3 存储桶中的另一个文件夹
- python - 在python中向网格正方形添加值
- assembly - ARMv6 调用约定,args 在 r0,r3 中并在 r1 中返回
- python - statsmodels python中VAR的多变量Breusch Godfrey LM自相关测试?
- node.js - 使用 express-session、connect-mongo 和 mongoose 存储会话
- python - 如何为我的哈希表打印值而不是内存地址?Python
- excel - 如何将特定工作簿永久分配给变量
- aws-lambda - 尽管有 AdministratorAccess [无服务器、Lambda、IAM],但无权执行 cloudformation DescribeStacks
- reactjs - 使用 react 和 axios 将输入值发送到后端
- python - 按项目设置用户角色读取/编辑项目,Django ORM