< prev index next >
src/share/vm/gc/cms/parNewGeneration.cpp
Print this page
rev 10559 : imported patch ParNewThreadStateSet
*** 278,288 ****
log_trace(gc, promotion)(" (%d: promotion failure size = " SIZE_FORMAT ") ",
_thread_num, _promotion_failed_info.first_size());
}
}
! class ParScanThreadStateSet: private ResourceArray {
public:
// Initializes states for the specified number of threads;
ParScanThreadStateSet(int num_threads,
Space& to_space,
ParNewGeneration& young_gen,
--- 278,288 ----
log_trace(gc, promotion)(" (%d: promotion failure size = " SIZE_FORMAT ") ",
_thread_num, _promotion_failed_info.first_size());
}
}
! class ParScanThreadStateSet: private GenericGrowableArray {
public:
// Initializes states for the specified number of threads;
ParScanThreadStateSet(int num_threads,
Space& to_space,
ParNewGeneration& young_gen,
*** 313,322 ****
--- 313,324 ----
private:
ParallelTaskTerminator& _term;
ParNewGeneration& _young_gen;
Generation& _old_gen;
+ ParScanThreadState* _data;
+ int length() const { return _len; };
public:
bool is_valid(int id) const { return id < length(); }
ParallelTaskTerminator* terminator() { return &_term; }
};
*** 327,356 ****
ObjToScanQueueSet& queue_set,
Stack<oop, mtGC>* overflow_stacks,
PreservedMarksSet& preserved_marks_set,
size_t desired_plab_sz,
ParallelTaskTerminator& term)
! : ResourceArray(sizeof(ParScanThreadState), num_threads),
_young_gen(young_gen),
_old_gen(old_gen),
_term(term)
{
assert(num_threads > 0, "sanity check!");
assert(ParGCUseLocalOverflow == (overflow_stacks != NULL),
"overflow_stack allocation mismatch");
// Initialize states.
for (int i = 0; i < num_threads; ++i) {
! new ((ParScanThreadState*)_data + i)
ParScanThreadState(&to_space, &young_gen, &old_gen, i, &queue_set,
overflow_stacks, preserved_marks_set.get(i),
desired_plab_sz, term);
}
}
inline ParScanThreadState& ParScanThreadStateSet::thread_state(int i) {
assert(i >= 0 && i < length(), "sanity check!");
! return ((ParScanThreadState*)_data)[i];
}
void ParScanThreadStateSet::trace_promotion_failed(const YoungGCTracer* gc_tracer) {
for (int i = 0; i < length(); ++i) {
if (thread_state(i).promotion_failed()) {
--- 329,359 ----
ObjToScanQueueSet& queue_set,
Stack<oop, mtGC>* overflow_stacks,
PreservedMarksSet& preserved_marks_set,
size_t desired_plab_sz,
ParallelTaskTerminator& term)
! : GenericGrowableArray(num_threads, num_threads, false, mtInternal),
_young_gen(young_gen),
_old_gen(old_gen),
_term(term)
{
assert(num_threads > 0, "sanity check!");
assert(ParGCUseLocalOverflow == (overflow_stacks != NULL),
"overflow_stack allocation mismatch");
// Initialize states.
+ _data = (ParScanThreadState*) raw_allocate(sizeof(ParScanThreadState));
for (int i = 0; i < num_threads; ++i) {
! ::new((void*) &_data[i])
ParScanThreadState(&to_space, &young_gen, &old_gen, i, &queue_set,
overflow_stacks, preserved_marks_set.get(i),
desired_plab_sz, term);
}
}
inline ParScanThreadState& ParScanThreadStateSet::thread_state(int i) {
assert(i >= 0 && i < length(), "sanity check!");
! return _data[i];
}
void ParScanThreadStateSet::trace_promotion_failed(const YoungGCTracer* gc_tracer) {
for (int i = 0; i < length(); ++i) {
if (thread_state(i).promotion_failed()) {
< prev index next >