0

我们在单个服务器(使用 Docker Compose)上运行数十个 Docker 容器(Metabase BI 工具,一个 Java 应用程序),并希望优化内存占用。

我通过提供以下 Java 选项启用了类共享:

-Xquickstart -Xshareclasses:cacheDir=/cache,verbose,checkURLTimestamps,persistent -Xscmx300M

但我只能让 Java 共享它自己的库代码:

root@f7dc95f540cf:/# java -Xshareclasses:cacheDir=/cache,printStats=classpath
1: 0x00007F5ACE807F1C CLASSPATH
    /opt/java/openjdk/lib/modules

Current statistics for cache "sharedcc_root": 

Cache created with:
    -Xnolinenumbers                      = false
    BCI Enabled                          = true
    Restrict Classpaths                  = false
    Feature                              = cr

有没有办法让 OpenJ9 也共享所有应用程序类?

4

2 回答 2

1

只要您的应用程序类加载器扩展了 URLClassLoader,OpenJ9 就应该能够缓存由该类加载器加载的应用程序类。默认情况下,OpenJ9 仅在它检测​​到的启动期间缓存 AOT 代码,但如果您放弃 -Xquickstart 并改为使用 -Xtune:virtualized 运行,也会发生更多的 AOT 代码缓存(在整个运行期间,即启动后期间) . 这可能会或可能不会帮助您的情况,但我想我会提到它。请让我知道情况如何。

于 2020-05-08T21:32:47.917 回答
0

通过从 Java 11 升级到 13 解决。

于 2020-02-29T14:58:33.393 回答