<br>Hi John, all --<br><br>I recently saw the JVM complain that the default value of GCTaskTimestampEntries was too low, when it was run with +PrintGCTaskTimeStamps :-<br><br>GCTaskTimeStamp* GCTaskThread::time_stamp_at(uint index) {<br>
  guarantee(index < GCTaskTimeStampEntries, "increase GCTaskTimeStampEntries");  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<br><br>
  return &(_time_stamps[index]);<br>}<br><br>Firstly, a guarantee here and an exit seems too draconian, rather the logging should drop the value presented and carry on. The culrpit is this piece of<br>code in the GCTaskThread work loop:-<br>
<br>        if (PrintGCTaskTimeStamps) {<br>          assert(_time_stamps != NULL,<br>            "Sanity (PrintGCTaskTimeStamps set late?)");<br><br>          timer.update();<br><br>          GCTaskTimeStamp* time_stamp = time_stamp_at(_time_stamp_index++);<br>
<br>          time_stamp->set_name(name);<br>          time_stamp->set_entry_time(entry_time);<br>          time_stamp->set_exit_time(timer.ticks());<br>        }<br><br><br>Secondly, does the max # timestamp entries depend on factors that could be set ergonomically upon start-up so one doesn't need to navigate here by trial-and-error?<br>
<br>Also, it would be great if one could have a suboption whereby such verbose logging could be limited to specific phases of GC, which could turn the verbosity<br>level up and down as specified. For example, I might want the logging only for major gc cycles of ParallelOldGC and not otherwise, so I should be able to<br>
say, for example: PrintParallelOldGCTaskTimeStamps (or equivalently say PrintGCTaskTimeStamps=ParllelOld) and have the verbose logging be limited to<br>that phase of GC. May be the logging framework can address issues like this in a consistent and uniform fashion.<br>
<br>Thanks!<br>-- ramki<br>