【问题标题】:Make OpenJ9 class sharing also share non-boot classes使 OpenJ9 类共享也共享非引导类
【发布时间】:2020-02-28 18:48:12
【问题描述】:

我们在单个服务器(使用 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 也共享所有应用程序类?

【问题讨论】:

    标签: java docker metabase openj9


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多