RFR: 8349214: Improve size optimization flags for MSVC builds

Magnus Ihse Bursie ihse at openjdk.org
Tue Feb 4 10:54:09 UTC 2025


On Tue, 4 Feb 2025 08:51:43 GMT, Matthias Baesken <mbaesken at openjdk.org> wrote:

> Looks like the binary size optimization flags are not ideal when compiling with MSVC.
> On other compilers (gcc/clang) the current size optimization flags lead in most cases to smaller libraries. On MSVC this seems to be not the case, the libs often get larger when optimizing for SIZE.
> 
> For example jvm.dll (build with VS2022) with current -Os size optimization
> 20M images/jdk/bin/server/jvm.dll
> 
> with -O1 set for size optimization
> 13M images/jdk/bin/server/jvm.dll
> 
> See the doc from MSVC about "optimize for size"
> https://learn.microsoft.com/en-us/cpp/build/reference/o1-o2-minimize-size-maximize-speed?view=msvc-170
> "The /O1 option sets the individual optimization options that create the smallest code in the majority of cases."
> The Os option is only a part of the size minimization flag set :
> /O1 (Minimize Size) equivalent to /Og /Os /Oy /Ob2 /GF /Gy

What libraries are currently optimized for size on Windows, i.e. is affected by this change?

What testing have you performed to ensure no new compiler bugs show up? Changing optimization level introduces a risk of compiler-related bugs, similar to compiler upgrades. Note that this is not only about bugs in the compiler, but in our code where we use undefined behavior, which happily have worked out fine for one optimization level, but which results in bad code generated (correctly) by the compiler.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/23432#issuecomment-2633543966


More information about the build-dev mailing list