On Thu, 28 Aug 2025 23:49:20 GMT, Kelvin Nilsen <kdnil...@openjdk.org> wrote:
>> ### Summary >> >> The new implementation of ObjectCountAfterGC for Shenandoah piggybacks off >> of the existing marking phases and records strongly marked objects in a >> histogram. If the event is disabled, the original marking closures are used. >> When enabled new mark-and-count closures are used by the worker threads. >> Each worker thread updates its local histogram as it marks an object. These >> local histograms are merged at the conclusion of the marking phase under a >> mutex. The event is emitted outside a safepoint. Because (most) Shenandoah's >> marking is done concurrently, so is the object counting work. >> >> ### Performance >> The performance test were ran using the Extremem benchmark on a default and >> stress workload. (will edit this section to include data after average time >> and test for GenShen) >> >> #### Default workload: >> ObjectCountAfterGC disabled (master branch): >> `[807.216s][info][gc,stats ] Pause Init Mark (G) = 0.003 s >> (a = 264 us)` >> `[807.216s][info][gc,stats ] Pause Init Mark (N) = 0.001 s >> (a = 91 us)` >> `[807.216s][info][gc,stats ] Concurrent Mark Roots = 0.041 s >> (a = 4099 us)` >> `[807.216s][info][gc,stats ] Concurrent Marking = 1.660 s >> (a = 166035 us)` >> `[807.216s][info][gc,stats ] Pause Final Mark (G) = 0.004 s >> (a = 446 us) ` >> `[807.216s][info][gc,stats ] Pause Final Mark (G) = 0.004 s >> (a = 446 us) ` >> `[807.216s][info][gc,stats ] Pause Final Mark (N) = 0.004 s >> (a = 357 us)` >> >> ObjectCountAfterGC disabled (feature branch): >> `[807.104s][info][gc,stats ] Pause Init Mark (G) = 0.003 s >> (a = 302 us)` >> `[807.104s][info][gc,stats ] Pause Init Mark (N) = 0.001 s >> (a = 92 us) ` >> `[807.104s][info][gc,stats ] Concurrent Mark Roots = 0.048 s >> (a = 4827 us)` >> `[807.104s][info][gc,stats ] Concurrent Marking = 1.666 s >> (a = 166638 us) ` >> `[807.104s][info][gc,stats ] Pause Final Mark (G) = 0.006 s >> (a = 603 us)` >> `[807.104s][info][gc,stats ] Pause Final Mark (N) = 0.005 s >> (a = 516 us)` >> >> ObjectCountAfterGC enabled (feature branch) >> `[807.299s][info][gc,stats ] Pause Init Mark (G) = 0.002 s >> (a = 227 us)` >> `[807.299s][info][gc,stats ] Pause Init Mark (N) = 0.001 s >> (a = 89 us) ` >> `[807.299s][info][gc,stats ] Concurrent Mark Roots ... > > src/hotspot/share/gc/shared/gcTrace.inline.hpp line 12: > >> 10: >> 11: // The ObjectCountEventSenderClosure will determine if only the >> ObjectCount >> 12: // event will be emitted instead of ObjectCountAfterGC. If false, then >> both > > If "what" is false? This comment is not clear. Are you speaking of the > SeparateEventEmission template parameter? > > I think the use of future-tense "will" also makes this comment confusing. > Can you write this in present tense? I'll remove this template parameter, since it won't be needed for the ObjectCountAfterGC PR. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/26977#discussion_r2312857523