< prev index next >
src/hotspot/share/gc/g1/g1OldGenAllocationTracker.cpp
Print this page
rev 60541 : [mq]: 8245511-base
rev 60542 : [mq]: 8245511-rev.3
@@ -22,21 +22,42 @@
*
*/
#include "precompiled.hpp"
#include "gc/g1/g1OldGenAllocationTracker.hpp"
+#include "logging/log.hpp"
G1OldGenAllocationTracker::G1OldGenAllocationTracker() :
- _last_cycle_old_bytes(0),
- _last_cycle_duration(0.0),
- _allocated_bytes_since_last_gc(0) {
+ _last_period_old_bytes(0),
+ _last_period_humongous_bytes(0),
+ _humongous_bytes_after_last_gc(0),
+ _humongous_bytes_after_penultimate_gc(0),
+ _allocated_bytes_since_last_gc(0),
+ _allocated_humongous_bytes_since_last_gc(0) {
}
-void G1OldGenAllocationTracker::reset_after_full_gc() {
- _last_cycle_duration = 0;
- reset_cycle_after_gc();
+void G1OldGenAllocationTracker::reset_after_gc(size_t humongous_bytes_after_gc) {
+ // Record last
+ _last_period_old_bytes = _allocated_bytes_since_last_gc;
+ _last_period_humongous_bytes = _allocated_humongous_bytes_since_last_gc;
+ _humongous_bytes_after_penultimate_gc = _humongous_bytes_after_last_gc;
+ _humongous_bytes_after_last_gc = humongous_bytes_after_gc;
+ // Reset
+ _allocated_bytes_since_last_gc = 0;
+ _allocated_humongous_bytes_since_last_gc = 0;
+ log_debug(gc, alloc, stats)("Old generation allocation in the last mutator period, "
+ "old gen allocated: " SIZE_FORMAT "B, humongous allocated: " SIZE_FORMAT "B.",
+ _last_period_old_bytes, _last_period_humongous_bytes);
}
-void G1OldGenAllocationTracker::reset_after_young_gc(double allocation_duration_s) {
- _last_cycle_duration = allocation_duration_s;
- reset_cycle_after_gc();
-}
\ No newline at end of file
+size_t G1OldGenAllocationTracker::last_period_net_survived_old_bytes() const {
+ // The upper limit of the freed region count is the number of regions allocated
+ // since the last gc. When more humongous regions survived the current gc than
+ // survived the previous one, deduct the increment.
+ size_t freed_humongous_bytes = _last_period_humongous_bytes;
+
+ if (freed_humongous_bytes > 0 && _humongous_bytes_after_penultimate_gc < _humongous_bytes_after_last_gc) {
+ freed_humongous_bytes -= _humongous_bytes_after_last_gc - _humongous_bytes_after_penultimate_gc;
+ }
+ assert(_last_period_old_bytes >= freed_humongous_bytes, "Allocation rate cannot be negative");
+ return _last_period_old_bytes - freed_humongous_bytes;
+ }
< prev index next >