RFR (XS): Correct prefetch offset for marked object iteration
Aleksey Shipilev
ashipile at redhat.com
Mon Apr 17 15:39:42 UTC 2017
Hi,
I don't know what I was thinking when setting prefetch offset to 1 in
marked_object_iterate. We should actually prefetch for forwarding pointer,
because we would most probably touch it first.
diff -r 3b56bf7682d0 src/share/vm/gc/shenandoah/shenandoahHeap.inline.hpp
--- a/src/share/vm/gc/shenandoah/shenandoahHeap.inline.hpp Sat Apr 15 10:14:47
2017 +0200
+++ b/src/share/vm/gc/shenandoah/shenandoahHeap.inline.hpp Mon Apr 17 17:32:32
2017 +0200
@@ -474,7 +474,7 @@
do {
avail = 0;
for (int c = 0; (c < dist) && (addr < limit); c++) {
- Prefetch::read(addr, 1);
+ Prefetch::read(addr, BrooksPointer::byte_offset());
oop obj = oop(addr);
slots[avail++] = obj;
if (addr < top_at_mark_start) {
Helps GC times for SPECjbb2015 in both adaptive+update-refs and passive modes.
Thanks,
-Aleksey
More information about the shenandoah-dev
mailing list