--- a/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.hpp Tue Nov 23 13:22:55 2010 -0800
+++ b/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.hpp Tue Aug 24 17:24:33 2010 -0400
@@ -31,19 +31,33 @@
// VM_GC_Operation:
// - VM_CGC_Operation
// - VM_G1CollectFull
-// - VM_G1CollectForAllocation
-// - VM_G1IncCollectionPause
-// - VM_G1PopRegionCollectionPause
+// - VM_G1OperationWithAllocRequest
+// - VM_G1CollectForAllocation
+// - VM_G1IncCollectionPause
+
+class VM_G1OperationWithAllocRequest: public VM_GC_Operation {
+protected:
+ size_t _word_size;
+ HeapWord* _result;
+ bool _pause_succeeded;
+
+public:
+ VM_G1OperationWithAllocRequest(unsigned int gc_count_before,
+ size_t word_size)
+ : VM_GC_Operation(gc_count_before),
+ _word_size(word_size), _result(NULL), _pause_succeeded(false) { }
+ HeapWord* result() { return _result; }
+ bool pause_succeeded() { return _pause_succeeded; }
+};
class VM_G1CollectFull: public VM_GC_Operation {
- public:
+public:
VM_G1CollectFull(unsigned int gc_count_before,
unsigned int full_gc_count_before,
GCCause::Cause cause)
: VM_GC_Operation(gc_count_before, full_gc_count_before) {
_gc_cause = cause;
}
- ~VM_G1CollectFull() {}
virtual VMOp_Type type() const { return VMOp_G1CollectFull; }
virtual void doit();
virtual const char* name() const {
@@ -51,45 +65,28 @@
}
};
-class VM_G1CollectForAllocation: public VM_GC_Operation {
- private:
- HeapWord* _res;
- size_t _size; // size of object to be allocated
- public:
- VM_G1CollectForAllocation(size_t size, int gc_count_before)
- : VM_GC_Operation(gc_count_before) {
- _size = size;
- _res = NULL;
- }
- ~VM_G1CollectForAllocation() {}
+class VM_G1CollectForAllocation: public VM_G1OperationWithAllocRequest {
+public:
+ VM_G1CollectForAllocation(unsigned int gc_count_before,
+ size_t word_size);
virtual VMOp_Type type() const { return VMOp_G1CollectForAllocation; }
virtual void doit();
virtual const char* name() const {
return "garbage-first collection to satisfy allocation";
}
- HeapWord* result() { return _res; }
};
-class VM_G1IncCollectionPause: public VM_GC_Operation {
+class VM_G1IncCollectionPause: public VM_G1OperationWithAllocRequest {
private:
- bool _should_initiate_conc_mark;
- double _target_pause_time_ms;
+ bool _should_initiate_conc_mark;
+ double _target_pause_time_ms;
unsigned int _full_collections_completed_before;
public:
VM_G1IncCollectionPause(unsigned int gc_count_before,
+ size_t word_size,
bool should_initiate_conc_mark,
double target_pause_time_ms,
- GCCause::Cause cause)
- : VM_GC_Operation(gc_count_before),
- _full_collections_completed_before(0),
- _should_initiate_conc_mark(should_initiate_conc_mark),
- _target_pause_time_ms(target_pause_time_ms) {
- guarantee(target_pause_time_ms > 0.0,
- err_msg("target_pause_time_ms = %1.6lf should be positive",
- target_pause_time_ms));
-
- _gc_cause = cause;
- }
+ GCCause::Cause gc_cause);
virtual VMOp_Type type() const { return VMOp_G1IncCollectionPause; }
virtual void doit();
virtual void doit_epilogue();
@@ -103,14 +100,9 @@
class VM_CGC_Operation: public VM_Operation {
VoidClosure* _cl;
const char* _printGCMessage;
- public:
- VM_CGC_Operation(VoidClosure* cl, const char *printGCMsg) :
- _cl(cl),
- _printGCMessage(printGCMsg)
- {}
-
- ~VM_CGC_Operation() {}
-
+public:
+ VM_CGC_Operation(VoidClosure* cl, const char *printGCMsg)
+ : _cl(cl), _printGCMessage(printGCMsg) { }
virtual VMOp_Type type() const { return VMOp_CGC_Operation; }
virtual void doit();
virtual bool doit_prologue();