RFR: 8214377: ZGC: Don't use memset to initialize array of ZForwardingTableEntry

Kim Barrett kim.barrett at oracle.com
Tue Dec 4 16:15:37 UTC 2018


> On Nov 29, 2018, at 7:49 AM, Per Liden <per.liden at oracle.com> wrote:
> 
> Use placement new instead of memset() to avoid compiler warning/error when using GCC 8 with -Werror=class-memaccess (memset to initialize non-trivial object).
> 
> To avoid any undefined behavior I also added a loop to destruct the objects properly, but this loop will be compiled down to nothing.

Just an FYI here; I see this change has been pushed.

FYI: Calling the destructor is only required if it has side effects
that the program depends on. See C++14 3.8/4. Of course, it is okay to
call it anyway, and I agree that currently it will optimize away.

Also, the for-loop of placement new calls might in this case be
optimized by the compiler into memset.

> I ran SPECjbb2015 to see if the execution time for "Prepare Relocation Set" was noticeably affected by this change (assuming memset does a batter job than then loop), but I can't see any real difference. I'll run a few more iterations over night just to make sure.
> 
> Bug: https://bugs.openjdk.java.net/browse/JDK-8214377
> Webrev: http://cr.openjdk.java.net/~pliden/8214377/webrev.0
> 
> /Per





More information about the hotspot-gc-dev mailing list