RFR: JDK-8200358 Remove mapfiles for JDK executables

Martin Buchholz martinrb at google.com
Thu Mar 29 06:04:32 UTC 2018


>From https://gcc.gnu.org/wiki/Visibility

Why is the new C++ visibility support so useful?

Put simply, it hides most of the ELF symbols which would have previously
(and unnecessarily) been public. This means:

   -

   *It very substantially improves load times of your DSO (Dynamic Shared
   Object).* For example, a huge C++ template-based library which was
   tested (the TnFOX Boost.Python bindings library) now loads in eight seconds
   rather than over six minutes!
   -

   *It lets the optimiser produce better code.* PLT indirections (when a
   function call or variable access must be looked up via the Global Offset
   Table such as in PIC code) can be completely avoided, thus substantially
   avoiding pipeline stalls on modern processors and thus much faster code.
   Furthermore when most of the symbols are bound locally, they can be safely
   elided (removed) completely through the entire DSO. This gives greater
   latitude especially to the inliner which no longer needs to keep an entry
   point around "just in case".
   -

   *It reduces the size of your DSO by 5-20%.* ELF's exported symbol table
   format is quite a space hog, giving the complete mangled symbol name which
   with heavy template usage can average around 1000 bytes. C++ templates spew
   out a huge amount of symbols and a typical C++ library can easily surpass
   30,000 symbols which is around 5-6Mb! Therefore if you cut out the 60-80%
   of unnecessary symbols, your DSO can be megabytes smaller!
   -

   *Much lower chance of symbol collision.* The old woe of two libraries
   internally using the same symbol for different things is finally behind us
   with this patch. Hallelujah!



More information about the build-dev mailing list