gpt4 book ai didi

java - jlink生成的自定义JRE具有较大的尺寸,而Jre最小

转载 作者:行者123 更新时间:2023-12-02 18:27:33 32 4
gpt4 key购买 nike

我正在尝试为纤细的Docker镜像提供最小的JRE。在Ubuntu上的open-jdk-11附带的jlink 11.0.4中,使用此自定义JRE构建的镜像实际上比使用默认JRE生成的镜像更大。我认为这是由于cutom_jre / lib / server / libjvm.so的大小过大

我正在Linkedin学习中关注Arun Gupta的Java开发人员Kubernetes。在某个时候,我注意到我的Ubuntu实例有一个奇怪的行为。在本类(class)中,我需要为最小的Spring Boot应用程序提供一个自定义JRE,以便将其用于细长的Docker镜像。

jlink \
--output myjre \
--add-modules $(jdeps --print-module-deps target/greeting.jar),\
java.xml,jdk.unsupported,java.sql,java.naming,java.desktop,\
java.management,java.security.jgss,java.instrument \

这种方法在类(class)中效果很好,并且 my_jre的大小适合为应用程序构建最小的Docker镜像。问题是在我的设置中,我使用的是openjdk-11,而不是openjdk-9。

使用我的设置, my_jre的结果大小将非常大(〜380mb)。经过一番调查,我发现这主要是并且可能仅是由于 my_jre/lib/server/libjvm.so的大小很大。

在此尝试之前,我还没有使用 jlink的任何经验。经过一番尝试和错误,并浏览了github上的类似问题之后,我发现了jlink功能之外的解决方法。

此解决方法来自 binutils软件包和 strip实用程序。

使用 strip标志运行 --strip-unneeded实用程序将缩小libjvm.so的大小,并有可能实现主要目标:为细长的Docker镜像提供最小的JRE(〜113mb)。

strip -p --strip-unneeded myjre/lib/server/libjvm.so

有知识的人会对这种风格的背景做出更深入的解释,我将不胜感激。另外,就此行为而言,从jdk9更改为jdk11是什么?除了jdk9 +提供的外部实用程序(例如jlink)以外,是否有任何标准流程可以实现此目标,而没有任何外部实用程序?

最佳答案

还有其他选项可以减小jlink的大小。
--strip-debug
--no-header-files
--no-man-pages
如需帮助,请参阅“jlink --help”
我还尝试创建自定义JRE。我得到libjvm.so将近415 MB。
通过上面提到的选项,我使JRE大小达到39.7 MB。

关于java - jlink生成的自定义JRE具有较大的尺寸,而Jre最小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58045819/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com