Size difference of Java.base image between OSX and Linux

Erik Joelsson erik.joelsson at oracle.com
Mon Nov 28 09:37:21 UTC 2016


Hello,

In my build of OpenJDK 9 (updated from dev today), libjvm.so on linux 
x64 is 20902848B. It has been stripped using "strip -g" which means 
remove all debug symbols. It seems it can be reduced further to 
17611752B using "strip --strip-unneeded", but I don't know if that is 
safe to do.

By default we use static linking of libstdc++ for libjvm.so for maximum 
portability of the binaries. In the OpenJDK community it's common to 
configure dynamic linking. This slightly reduces size to 19908552B.

Note that we build using GCC on Linux and Clang on macosx. I'm guessing 
that's the biggest source of size differences.

/Erik

On 2016-11-26 15:51, Jola I Waldek wrote:
>
>>> From: David Holmes <david.holmes at oracle.com>
>>> Date: October 28, 2016 at 17:30:22 EDT
>>> To: Waldek Kozaczuk <jwkozaczuk at gmail.com>, jigsaw-dev at openjdk.java.net
>>> Subject: Re: Size difference of Java.base image between OSX and Linux
>>>
>>>> On 29/10/2016 3:32 AM, Waldek Kozaczuk wrote:
>>>>
>>>> I used jlink to create minimal custom JRE image on OSX and Linux and I noticed there is a significant difference in size. The Mac version takes 21M where the Linux one takes 30M which means Linux version is 50% bigger than Mac.
>>>>
>>>> Is it as you would have expected? Why is size difference so big?
>>>>
>>>> I noticed that lib/modules is similar in size (1M difference) but the biggest difference is between ./lib/server/libjvm.dylib (12 M) and ./lib/amd64/server/libjvm.so (21 M). So the linux version of the shared library object is almost twice as big on linux (both 64 bit).
>>> Nothing jlink related. This is a question for the build-dev and/or hotspot-dev folk. It seems that in 8u libjvm is <1MB larger on Linux than OSX. However in 9 the Linux version has steadily grown to ~21M while the OSX version has shrunk to ~12M. It may be related to the debugging/symbol info still present in the library.
>>>
>>> David
>>>
>>>> Here is the command I used to create the image:
>>>> jdk-9/bin/jlink --module-path jdk-9/jmods --add-modules java.base --output image_target --strip-debug --compress=2
>>>>
>>>> Here is a detailed listing of files on Mac:
>>>> 68K    ./bin/java 68K    ./bin/keytool 8.0K    ./conf/net.properties 4.0K    ./conf/security/java.policy 40K    ./conf/security/java.security 4.0K    ./conf/security/policy/limited/default_local.policy 4.0K    ./conf/security/policy/limited/default_US_export.policy 4.0K    ./conf/security/policy/limited/exempt_local.policy 4.0K    ./conf/security/policy/README.txt 4.0K    ./conf/security/policy/unlimited/default_local.policy 4.0K    ./conf/security/policy/unlimited/default_US_export.policy 20K    ./include/classfile_constants.h 4.0K    ./include/darwin/jni_md.h 76K    ./include/jni.h 80K    ./include/jvmti.h 4.0K    ./include/jvmticmlr.h 68K    ./lib/jli/libjli.dylib 16K    ./lib/jspawnhelper 4.0K    ./lib/jvm.cfg 204K    ./lib/libjava.dylib 32K    ./lib/libjimage.dylib 12K    ./lib/libjsig.dylib 92K    ./lib/libnet.dylib 68K    ./lib/libnio.dylib 44K    ./lib/libosxsecurity.dylib 48K    ./lib/libverify.dylib 32K    ./lib/libzip.dylib 7.2M    ./lib/modules 4.0K    ./lib/security/blacklist 4.0K    ./lib/security/blacklisted.certs 112K    ./lib/security/cacerts 8.0K    ./lib/security/default.policy 0B    ./lib/security/trusted.libraries 12K    ./lib/server/libjsig.dylib 12M    ./lib/server/libjvm.dylib 4.0K    ./lib/server/Xusage.txt 104K    ./lib/tzdb.dat 4.0K    ./release
>>>>
>>>> Here is a detailed listing of files on Linux:
>>>>
>>>> 4.0K    ./lib/security/blacklisted.certs
>>>> 8.0K    ./lib/security/default.policy
>>>> 4.0K    ./lib/security/blacklist
>>>> 0    ./lib/security/trusted.libraries
>>>> 104K    ./lib/tzdb.dat
>>>> 12K    ./lib/jexec
>>>> 4.0K    ./lib/amd64/jvm.cfg
>>>> 108K    ./lib/amd64/libnet.so
>>>> 72K    ./lib/amd64/jli/libjli.so
>>>> 132K    ./lib/amd64/libjimage.so
>>>> 220K    ./lib/amd64/libjava.so
>>>> 36K    ./lib/amd64/libzip.so
>>>> 21M    ./lib/amd64/server/libjvm.so
>>>> 4.0K    ./lib/amd64/server/Xusage.txt
>>>> 12K    ./lib/amd64/server/libjsig.so
>>>> 88K    ./lib/amd64/libnio.so
>>>> 12K    ./lib/amd64/libjsig.so
>>>> 64K    ./lib/amd64/libverify.so
>>>> 8.2M    ./lib/modules
>>>> 4.0K    ./release
>>>> 4.0K    ./include/jvmticmlr.h
>>>> 4.0K    ./include/linux/jni_md.h
>>>> 20K    ./include/classfile_constants.h
>>>> 80K    ./include/jvmti.h
>>>> 76K    ./include/jni.h
>>>> 4.0K    ./conf/security/policy/limited/default_local.policy
>>>> 4.0K    ./conf/security/policy/limited/default_US_export.policy
>>>> 4.0K    ./conf/security/policy/limited/exempt_local.policy
>>>> 4.0K    ./conf/security/policy/README.txt
>>>> 4.0K    ./conf/security/policy/unlimited/default_local.policy
>>>> 4.0K    ./conf/security/policy/unlimited/default_US_export.policy
>>>> 40K    ./conf/security/java.security
>>>> 4.0K    ./conf/security/java.policy
>>>> 8.0K    ./conf/net.properties
>>>> 12K    ./bin/java
>>>> 12K    ./bin/keytool
>>>>
>>>> Regards,
>>>> Waldek
>>>>
>>>> Sent from my iPhone
>>>>





More information about the build-dev mailing list