< prev index next >
src/share/vm/gc_implementation/shared/vmGCOperations.hpp
Print this page
rev 7474 : imported patch cleanup
*** 1,7 ****
/*
! * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 36,58 ****
// a set of operations (VM_Operation) related to GC.
//
// VM_Operation
// VM_GC_Operation
// VM_GC_HeapInspection
- // VM_GenCollectForAllocation
// VM_GenCollectFull
// VM_GenCollectFullConcurrent
- // VM_ParallelGCFailedAllocation
// VM_ParallelGCSystemGC
// VM_GC_Operation
// - implements methods common to all classes in the hierarchy:
// prevents multiple gc requests and manages lock on heap;
//
// VM_GC_HeapInspection
// - prints class histogram on SIGBREAK if PrintClassHistogram
// is specified; and also the attach "inspectheap" operation
//
// VM_GenCollectForAllocation
// VM_ParallelGCFailedAllocation
// - this operation is invoked when allocation is failed;
// operation performs garbage collection and tries to
// allocate afterwards;
--- 36,60 ----
// a set of operations (VM_Operation) related to GC.
//
// VM_Operation
// VM_GC_Operation
// VM_GC_HeapInspection
// VM_GenCollectFull
// VM_GenCollectFullConcurrent
// VM_ParallelGCSystemGC
+ // VM_CollectForAllocation
+ // VM_GenCollectForAllocation
+ // VM_ParallelGCFailedAllocation
// VM_GC_Operation
// - implements methods common to all classes in the hierarchy:
// prevents multiple gc requests and manages lock on heap;
//
// VM_GC_HeapInspection
// - prints class histogram on SIGBREAK if PrintClassHistogram
// is specified; and also the attach "inspectheap" operation
//
+ // VM_CollectForAllocation
// VM_GenCollectForAllocation
// VM_ParallelGCFailedAllocation
// - this operation is invoked when allocation is failed;
// operation performs garbage collection and tries to
// allocate afterwards;
*** 65,76 ****
//
class VM_GC_Operation: public VM_Operation {
protected:
BasicLock _pending_list_basic_lock; // for refs pending list notification (PLL)
! unsigned int _gc_count_before; // gc count before acquiring PLL
! unsigned int _full_gc_count_before; // full gc count before acquiring PLL
bool _full; // whether a "full" collection
bool _prologue_succeeded; // whether doit_prologue succeeded
GCCause::Cause _gc_cause; // the putative cause for this gc op
bool _gc_locked; // will be set if gc was locked
--- 67,78 ----
//
class VM_GC_Operation: public VM_Operation {
protected:
BasicLock _pending_list_basic_lock; // for refs pending list notification (PLL)
! uint _gc_count_before; // gc count before acquiring PLL
! uint _full_gc_count_before; // full gc count before acquiring PLL
bool _full; // whether a "full" collection
bool _prologue_succeeded; // whether doit_prologue succeeded
GCCause::Cause _gc_cause; // the putative cause for this gc op
bool _gc_locked; // will be set if gc was locked
*** 79,91 ****
// java.lang.ref.Reference support
void acquire_pending_list_lock();
void release_and_notify_pending_list_lock();
public:
! VM_GC_Operation(unsigned int gc_count_before,
GCCause::Cause _cause,
! unsigned int full_gc_count_before = 0,
bool full = false) {
_full = full;
_prologue_succeeded = false;
_gc_count_before = gc_count_before;
--- 81,93 ----
// java.lang.ref.Reference support
void acquire_pending_list_lock();
void release_and_notify_pending_list_lock();
public:
! VM_GC_Operation(uint gc_count_before,
GCCause::Cause _cause,
! uint full_gc_count_before = 0,
bool full = false) {
_full = full;
_prologue_succeeded = false;
_gc_count_before = gc_count_before;
*** 158,197 ****
void set_columns(const char* value) {_columns = value;}
protected:
bool collect();
};
! class VM_GenCollectForAllocation: public VM_GC_Operation {
private:
- HeapWord* _res;
- size_t _size; // size of object to be allocated.
bool _tlab; // alloc is of a tlab.
public:
VM_GenCollectForAllocation(size_t size,
bool tlab,
! unsigned int gc_count_before)
! : VM_GC_Operation(gc_count_before, GCCause::_allocation_failure),
! _size(size),
! _tlab(tlab) {
! _res = NULL;
! }
~VM_GenCollectForAllocation() {}
virtual VMOp_Type type() const { return VMOp_GenCollectForAllocation; }
virtual void doit();
- HeapWord* result() const { return _res; }
};
-
// VM operation to invoke a collection of the heap as a
// GenCollectedHeap heap.
class VM_GenCollectFull: public VM_GC_Operation {
private:
int _max_level;
public:
! VM_GenCollectFull(unsigned int gc_count_before,
! unsigned int full_gc_count_before,
GCCause::Cause gc_cause,
int max_level)
: VM_GC_Operation(gc_count_before, gc_cause, full_gc_count_before, true /* full */),
_max_level(max_level) { }
~VM_GenCollectFull() {}
--- 160,204 ----
void set_columns(const char* value) {_columns = value;}
protected:
bool collect();
};
+ class VM_CollectForAllocation : public VM_GC_Operation {
+ protected:
+ size_t _word_size; // Size of object to be allocated (in number of words)
+ HeapWord* _result; // Allocation result (NULL if allocation failed)
+
+ public:
+ VM_CollectForAllocation(size_t word_size, uint gc_count_before, GCCause::Cause cause);
+
+ HeapWord* result() const {
+ return _result;
+ }
+ };
! class VM_GenCollectForAllocation : public VM_CollectForAllocation {
private:
bool _tlab; // alloc is of a tlab.
public:
VM_GenCollectForAllocation(size_t size,
bool tlab,
! uint gc_count_before)
! : VM_CollectForAllocation(size, gc_count_before, GCCause::_allocation_failure),
! _tlab(tlab) {}
~VM_GenCollectForAllocation() {}
virtual VMOp_Type type() const { return VMOp_GenCollectForAllocation; }
virtual void doit();
};
// VM operation to invoke a collection of the heap as a
// GenCollectedHeap heap.
class VM_GenCollectFull: public VM_GC_Operation {
private:
int _max_level;
public:
! VM_GenCollectFull(uint gc_count_before,
! uint full_gc_count_before,
GCCause::Cause gc_cause,
int max_level)
: VM_GC_Operation(gc_count_before, gc_cause, full_gc_count_before, true /* full */),
_max_level(max_level) { }
~VM_GenCollectFull() {}
*** 206,217 ****
Metaspace::MetadataType _mdtype;
ClassLoaderData* _loader_data;
public:
VM_CollectForMetadataAllocation(ClassLoaderData* loader_data,
size_t size, Metaspace::MetadataType mdtype,
! unsigned int gc_count_before,
! unsigned int full_gc_count_before,
GCCause::Cause gc_cause)
: VM_GC_Operation(gc_count_before, gc_cause, full_gc_count_before, true),
_loader_data(loader_data), _size(size), _mdtype(mdtype), _result(NULL) {
}
virtual VMOp_Type type() const { return VMOp_CollectForMetadataAllocation; }
--- 213,224 ----
Metaspace::MetadataType _mdtype;
ClassLoaderData* _loader_data;
public:
VM_CollectForMetadataAllocation(ClassLoaderData* loader_data,
size_t size, Metaspace::MetadataType mdtype,
! uint gc_count_before,
! uint full_gc_count_before,
GCCause::Cause gc_cause)
: VM_GC_Operation(gc_count_before, gc_cause, full_gc_count_before, true),
_loader_data(loader_data), _size(size), _mdtype(mdtype), _result(NULL) {
}
virtual VMOp_Type type() const { return VMOp_CollectForMetadataAllocation; }
< prev index next >