in Extremem/src/main/java/com/amazon/corretto/benchmark/extremem/MemoryLog.java [509:596]
static void report(ExtrememThread t, boolean reportCSV,
MemoryLog alloc_log, MemoryLog discard_log) {
int lifespans = LifeSpan.OrdinalCount;
int flavors = MemoryFlavor.OrdinalCount;
// Report the snapshot of memory usage before generation of this
// report results in additional allocation and garbage.
long[][] allocs = new long[lifespans][flavors];
long[][] discards = new long[lifespans][flavors];
long[][] deltas = new long[lifespans][flavors];
for (int i = 0; i < LifeSpan.OrdinalCount; i++) {
for (int j = 0; j < MemoryFlavor.OrdinalCount; j++) {
allocs[i][j] = alloc_log.tallies[i][j];
discards[i][j] = discard_log.tallies[i][j];
deltas[i][j] = allocs[i][j] - discards[i][j];
}
}
// Account for three temporary arrays (allocs, discards, deltas),
// each holding five inner arrays.
MemoryLog log = t.memoryLog();
Polarity Grow = Polarity.Expand;
log.accumulate(LifeSpan.Ephemeral, MemoryFlavor.ArrayObject, Grow, 18);
log.accumulate(LifeSpan.Ephemeral, MemoryFlavor.ArrayReference,
Grow, 3 * 5);
log.accumulate(LifeSpan.Ephemeral, MemoryFlavor.ArrayRSB,
Grow, 3 * 5 * 10 * Util.SizeOfLong);
if (reportCSV) {
reportCSV(t, allocs, discards, deltas);
} else {
reportHeaders();
long[] a_row = allocs[LifeSpan.Ephemeral.ordinal()];
long[] d_row = discards[LifeSpan.Ephemeral.ordinal()];
long[] delta_row = deltas[LifeSpan.Ephemeral.ordinal()];
reportOneRow(t, "", a_row);
reportOneRow(t, "Ephemeral", d_row);
reportCumulativeOneRow(t, "", null, delta_row);
reportDivider();
a_row = allocs[LifeSpan.TransientShort.ordinal()];
d_row = discards[LifeSpan.TransientShort.ordinal()];
delta_row = deltas[LifeSpan.TransientShort.ordinal()];
reportOneRow(t, "", a_row);
reportOneRow(t, "Transient", d_row);
reportCumulativeOneRow(t, "Short", null, delta_row);
reportDivider();
a_row = allocs[LifeSpan.TransientIntermediate.ordinal()];
d_row = discards[LifeSpan.TransientIntermediate.ordinal()];
delta_row = deltas[LifeSpan.TransientIntermediate.ordinal()];
reportOneRow(t, "", a_row);
reportOneRow(t, "Transient", d_row);
reportCumulativeOneRow(t, "Intermediate", null, delta_row);
reportDivider();
a_row = allocs[LifeSpan.TransientLingering.ordinal()];
d_row = discards[LifeSpan.TransientLingering.ordinal()];
delta_row = deltas[LifeSpan.TransientLingering.ordinal()];
reportOneRow(t, "", a_row);
reportOneRow(t, "Transient", d_row);
reportCumulativeOneRow(t, "Lingering", null, delta_row);
reportDivider();
a_row = allocs[LifeSpan.NearlyForever.ordinal()];
d_row = discards[LifeSpan.NearlyForever.ordinal()];
delta_row = deltas[LifeSpan.NearlyForever.ordinal()];
reportOneRow(t, "", a_row);
reportOneRow(t, "NearlyForever", d_row);
reportCumulativeOneRow(t, "", null, delta_row);
reportDivider();
}
MemoryLog garbage = t.garbageLog();
// accumulate the allocs, discards, and deltas arrays, each with
// five inner arrays.
garbage.accumulate(LifeSpan.Ephemeral, MemoryFlavor.ArrayObject,
Grow, 18);
garbage.accumulate(LifeSpan.Ephemeral, MemoryFlavor.ArrayReference,
Grow, 3 * 5);
garbage.accumulate(LifeSpan.Ephemeral, MemoryFlavor.ArrayRSB,
Grow, 3 * 5 * 10 * Util.SizeOfLong);
}