annotate src/share/vm/gc_implementation/g1/g1CodeCacheRemSet.hpp @ 20218:828056cf311f

8040792: G1: Memory usage calculation uses sizeof(this) instead of sizeof(classname) Summary: A few locations in the code use sizeof(this) which returns the size of the pointer instead of sizeof(classname) which returns the size of the sum of its members. This change fixes these errors and adds a few tests. Reviewed-by: mgerdin, brutisso
author tschatzl
date Mon, 21 Jul 2014 09:40:19 +0200
parents 82693fb204a5
children 2c6ef90f030a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17753
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
1 /*
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
4 *
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
7 * published by the Free Software Foundation.
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
8 *
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
13 * accompanied this code).
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
14 *
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
18 *
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
21 * questions.
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
22 *
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
23 */
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
24
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1CODECACHEREMSET_HPP
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
26 #define SHARE_VM_GC_IMPLEMENTATION_G1_G1CODECACHEREMSET_HPP
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
27
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
28 #include "memory/allocation.hpp"
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
29 #include "memory/freeList.hpp"
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
30 #include "runtime/globals.hpp"
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
31
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
32 class CodeBlobClosure;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
33
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
34 class G1CodeRootChunk : public CHeapObj<mtGC> {
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
35 private:
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
36 static const int NUM_ENTRIES = 32;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
37 public:
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
38 G1CodeRootChunk* _next;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
39 G1CodeRootChunk* _prev;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
40
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
41 nmethod** _top;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
42
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
43 nmethod* _data[NUM_ENTRIES];
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
44
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
45 nmethod** bottom() const {
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
46 return (nmethod**) &(_data[0]);
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
47 }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
48
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
49 nmethod** end() const {
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
50 return (nmethod**) &(_data[NUM_ENTRIES]);
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
51 }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
52
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
53 public:
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
54 G1CodeRootChunk();
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
55 ~G1CodeRootChunk() {}
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
56
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
57 static size_t word_size() { return (size_t)(align_size_up_(sizeof(G1CodeRootChunk), HeapWordSize) / HeapWordSize); }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
58
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
59 // FreeList "interface" methods
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
60
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
61 G1CodeRootChunk* next() const { return _next; }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
62 G1CodeRootChunk* prev() const { return _prev; }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
63 void set_next(G1CodeRootChunk* v) { _next = v; assert(v != this, "Boom");}
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
64 void set_prev(G1CodeRootChunk* v) { _prev = v; assert(v != this, "Boom");}
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
65 void clear_next() { set_next(NULL); }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
66 void clear_prev() { set_prev(NULL); }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
67
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
68 size_t size() const { return word_size(); }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
69
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
70 void link_next(G1CodeRootChunk* ptr) { set_next(ptr); }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
71 void link_prev(G1CodeRootChunk* ptr) { set_prev(ptr); }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
72 void link_after(G1CodeRootChunk* ptr) {
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
73 link_next(ptr);
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
74 if (ptr != NULL) ptr->link_prev((G1CodeRootChunk*)this);
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
75 }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
76
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
77 bool is_free() { return true; }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
78
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
79 // New G1CodeRootChunk routines
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
80
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
81 void reset();
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
82
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
83 bool is_empty() const {
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
84 return _top == bottom();
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
85 }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
86
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
87 bool is_full() const {
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
88 return _top == (nmethod**)end();
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
89 }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
90
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
91 bool contains(nmethod* method) {
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
92 nmethod** cur = bottom();
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
93 while (cur != _top) {
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
94 if (*cur == method) return true;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
95 cur++;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
96 }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
97 return false;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
98 }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
99
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
100 bool add(nmethod* method) {
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
101 if (is_full()) return false;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
102 *_top = method;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
103 _top++;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
104 return true;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
105 }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
106
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
107 bool remove(nmethod* method) {
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
108 nmethod** cur = bottom();
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
109 while (cur != _top) {
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
110 if (*cur == method) {
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
111 memmove(cur, cur + 1, (_top - (cur + 1)) * sizeof(nmethod**));
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
112 _top--;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
113 return true;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
114 }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
115 cur++;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
116 }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
117 return false;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
118 }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
119
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
120 void nmethods_do(CodeBlobClosure* blk);
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
121
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
122 nmethod* pop() {
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
123 if (is_empty()) {
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
124 return NULL;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
125 }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
126 _top--;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
127 return *_top;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
128 }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
129 };
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
130
20211
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
131 // Manages free chunks.
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
132 class G1CodeRootChunkManager VALUE_OBJ_CLASS_SPEC {
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
133 private:
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
134 // Global free chunk list management
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
135 FreeList<G1CodeRootChunk> _free_list;
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
136 // Total number of chunks handed out
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
137 size_t _num_chunks_handed_out;
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
138
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
139 public:
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
140 G1CodeRootChunkManager();
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
141
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
142 G1CodeRootChunk* new_chunk();
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
143 void free_chunk(G1CodeRootChunk* chunk);
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
144 // Free all elements of the given list.
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
145 void free_all_chunks(FreeList<G1CodeRootChunk>* list);
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
146
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
147 void initialize();
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
148 void purge_chunks(size_t keep_ratio);
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
149
20218
828056cf311f 8040792: G1: Memory usage calculation uses sizeof(this) instead of sizeof(classname)
tschatzl
parents: 20211
diff changeset
150 static size_t static_mem_size();
20211
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
151 size_t fl_mem_size();
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
152
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
153 #ifndef PRODUCT
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
154 size_t num_chunks_handed_out() const;
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
155 size_t num_free_chunks() const;
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
156 #endif
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
157 };
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
158
17753
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
159 // Implements storage for a set of code roots.
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
160 // All methods that modify the set are not thread-safe except if otherwise noted.
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
161 class G1CodeRootSet VALUE_OBJ_CLASS_SPEC {
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
162 private:
20211
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
163 // Global default free chunk manager instance.
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
164 static G1CodeRootChunkManager _default_chunk_manager;
17753
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
165
20211
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
166 G1CodeRootChunk* new_chunk() { return _manager->new_chunk(); }
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
167 void free_chunk(G1CodeRootChunk* chunk) { _manager->free_chunk(chunk); }
17753
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
168 // Free all elements of the given list.
20211
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
169 void free_all_chunks(FreeList<G1CodeRootChunk>* list) { _manager->free_all_chunks(list); }
17753
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
170
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
171 // Return the chunk that contains the given nmethod, NULL otherwise.
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
172 // Scans the list of chunks backwards, as this method is used to add new
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
173 // entries, which are typically added in bulk for a single nmethod.
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
174 G1CodeRootChunk* find(nmethod* method);
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
175 void free(G1CodeRootChunk* chunk);
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
176
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
177 size_t _length;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
178 FreeList<G1CodeRootChunk> _list;
20211
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
179 G1CodeRootChunkManager* _manager;
17753
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
180
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
181 public:
20211
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
182 // If an instance is initialized with a chunk manager of NULL, use the global
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
183 // default one.
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
184 G1CodeRootSet(G1CodeRootChunkManager* manager = NULL);
17753
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
185 ~G1CodeRootSet();
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
186
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
187 static void purge_chunks(size_t keep_ratio);
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
188
20218
828056cf311f 8040792: G1: Memory usage calculation uses sizeof(this) instead of sizeof(classname)
tschatzl
parents: 20211
diff changeset
189 static size_t free_chunks_static_mem_size();
20211
82693fb204a5 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 17753
diff changeset
190 static size_t free_chunks_mem_size();
17753
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
191
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
192 // Search for the code blob from the recently allocated ones to find duplicates more quickly, as this
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
193 // method is likely to be repeatedly called with the same nmethod.
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
194 void add(nmethod* method);
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
195
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
196 void remove(nmethod* method);
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
197 nmethod* pop();
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
198
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
199 bool contains(nmethod* method);
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
200
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
201 void clear();
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
202
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
203 void nmethods_do(CodeBlobClosure* blk) const;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
204
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
205 bool is_empty() { return length() == 0; }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
206
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
207 // Length in elements
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
208 size_t length() const { return _length; }
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
209
20218
828056cf311f 8040792: G1: Memory usage calculation uses sizeof(this) instead of sizeof(classname)
tschatzl
parents: 20211
diff changeset
210 // Static data memory size in bytes of this set.
828056cf311f 8040792: G1: Memory usage calculation uses sizeof(this) instead of sizeof(classname)
tschatzl
parents: 20211
diff changeset
211 static size_t static_mem_size();
17753
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
212 // Memory size in bytes taken by this set.
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
213 size_t mem_size();
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
214
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
215 static void test() PRODUCT_RETURN;
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
216 };
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
217
191174b49bec 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents:
diff changeset
218 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1CODECACHEREMSET_HPP