21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_PTRQUEUE_HPP
26 #define SHARE_VM_GC_IMPLEMENTATION_G1_PTRQUEUE_HPP
27
28 #include "memory/allocation.hpp"
29 #include "utilities/sizes.hpp"
30
31 // There are various techniques that require threads to be able to log
32 // addresses. For example, a generational write barrier might log
33 // the addresses of modified old-generation objects. This type supports
34 // this operation.
35
36 // The definition of placement operator new(size_t, void*) in the <new>.
37 #include <new>
38
39 class PtrQueueSet;
40 class PtrQueue VALUE_OBJ_CLASS_SPEC {
41
42 protected:
43 // The ptr queue set to which this queue belongs.
44 PtrQueueSet* _qset;
45
46 // Whether updates should be logged.
47 bool _active;
48
49 // The buffer.
50 void** _buf;
51 // The index at which an object was last enqueued. Starts at "_sz"
52 // (indicating an empty buffer) and goes towards zero.
53 size_t _index;
54
55 // The size of the buffer.
56 size_t _sz;
57
58 // If true, the queue is permanent, and doesn't need to deallocate
59 // its buffer in the destructor (since that obtains a lock which may not
60 // be legally locked by then.
|
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_PTRQUEUE_HPP
26 #define SHARE_VM_GC_IMPLEMENTATION_G1_PTRQUEUE_HPP
27
28 #include "memory/allocation.hpp"
29 #include "utilities/sizes.hpp"
30
31 // There are various techniques that require threads to be able to log
32 // addresses. For example, a generational write barrier might log
33 // the addresses of modified old-generation objects. This type supports
34 // this operation.
35
36 // The definition of placement operator new(size_t, void*) in the <new>.
37 #include <new>
38
39 class PtrQueueSet;
40 class PtrQueue VALUE_OBJ_CLASS_SPEC {
41 friend class VMStructs;
42
43 protected:
44 // The ptr queue set to which this queue belongs.
45 PtrQueueSet* _qset;
46
47 // Whether updates should be logged.
48 bool _active;
49
50 // The buffer.
51 void** _buf;
52 // The index at which an object was last enqueued. Starts at "_sz"
53 // (indicating an empty buffer) and goes towards zero.
54 size_t _index;
55
56 // The size of the buffer.
57 size_t _sz;
58
59 // If true, the queue is permanent, and doesn't need to deallocate
60 // its buffer in the destructor (since that obtains a lock which may not
61 // be legally locked by then.
|