Mercurial > hg > graal-compiler
comparison src/share/vm/code/codeCache.hpp @ 989:148e5441d916
6863023: need non-perm oops in code cache for JSR 292
Summary: Make a special root-list for those few nmethods which might contain non-perm oops.
Reviewed-by: twisti, kvn, never, jmasa, ysr
author | jrose |
---|---|
date | Tue, 15 Sep 2009 21:53:47 -0700 |
parents | d1605aabd0a1 |
children | 5f24d0319e54 |
comparison
equal
deleted
inserted
replaced
987:00977607da34 | 989:148e5441d916 |
---|---|
43 // 4422213 or 4436291 for details. | 43 // 4422213 or 4436291 for details. |
44 static CodeHeap * _heap; | 44 static CodeHeap * _heap; |
45 static int _number_of_blobs; | 45 static int _number_of_blobs; |
46 static int _number_of_nmethods_with_dependencies; | 46 static int _number_of_nmethods_with_dependencies; |
47 static bool _needs_cache_clean; | 47 static bool _needs_cache_clean; |
48 static nmethod* _scavenge_root_nmethods; // linked via nm->scavenge_root_link() | |
48 | 49 |
49 static void verify_if_often() PRODUCT_RETURN; | 50 static void verify_if_often() PRODUCT_RETURN; |
51 | |
52 static void mark_scavenge_root_nmethods() PRODUCT_RETURN; | |
53 static void verify_perm_nmethods(CodeBlobClosure* f_or_null) PRODUCT_RETURN; | |
54 | |
50 public: | 55 public: |
51 | 56 |
52 // Initialization | 57 // Initialization |
53 static void initialize(); | 58 static void initialize(); |
54 | 59 |
59 static int alignment_offset(); // guaranteed offset of first CodeBlob byte within alignment unit (i.e., allocation header) | 64 static int alignment_offset(); // guaranteed offset of first CodeBlob byte within alignment unit (i.e., allocation header) |
60 static void free(CodeBlob* cb); // frees a CodeBlob | 65 static void free(CodeBlob* cb); // frees a CodeBlob |
61 static void flush(); // flushes all CodeBlobs | 66 static void flush(); // flushes all CodeBlobs |
62 static bool contains(void *p); // returns whether p is included | 67 static bool contains(void *p); // returns whether p is included |
63 static void blobs_do(void f(CodeBlob* cb)); // iterates over all CodeBlobs | 68 static void blobs_do(void f(CodeBlob* cb)); // iterates over all CodeBlobs |
69 static void blobs_do(CodeBlobClosure* f); // iterates over all CodeBlobs | |
64 static void nmethods_do(void f(nmethod* nm)); // iterates over all nmethods | 70 static void nmethods_do(void f(nmethod* nm)); // iterates over all nmethods |
65 | 71 |
66 // Lookup | 72 // Lookup |
67 static CodeBlob* find_blob(void* start); | 73 static CodeBlob* find_blob(void* start); |
68 static nmethod* find_nmethod(void* start); | 74 static nmethod* find_nmethod(void* start); |
104 // to) any unmarked codeBlobs in the cache. Sets "marked_for_unloading" | 110 // to) any unmarked codeBlobs in the cache. Sets "marked_for_unloading" |
105 // to "true" iff some code got unloaded. | 111 // to "true" iff some code got unloaded. |
106 static void do_unloading(BoolObjectClosure* is_alive, | 112 static void do_unloading(BoolObjectClosure* is_alive, |
107 OopClosure* keep_alive, | 113 OopClosure* keep_alive, |
108 bool unloading_occurred); | 114 bool unloading_occurred); |
109 static void oops_do(OopClosure* f); | 115 static void oops_do(OopClosure* f) { |
116 CodeBlobToOopClosure oopc(f, /*do_marking=*/ false); | |
117 blobs_do(&oopc); | |
118 } | |
119 static void asserted_non_scavengable_nmethods_do(CodeBlobClosure* f = NULL) PRODUCT_RETURN; | |
120 static void scavenge_root_nmethods_do(CodeBlobClosure* f); | |
121 | |
122 static nmethod* scavenge_root_nmethods() { return _scavenge_root_nmethods; } | |
123 static void set_scavenge_root_nmethods(nmethod* nm) { _scavenge_root_nmethods = nm; } | |
124 static void add_scavenge_root_nmethod(nmethod* nm); | |
125 static void drop_scavenge_root_nmethod(nmethod* nm); | |
126 static void prune_scavenge_root_nmethods(); | |
110 | 127 |
111 // Printing/debugging | 128 // Printing/debugging |
112 static void print() PRODUCT_RETURN; // prints summary | 129 static void print() PRODUCT_RETURN; // prints summary |
113 static void print_internals(); | 130 static void print_internals(); |
114 static void verify(); // verifies the code cache | 131 static void verify(); // verifies the code cache |
132 static void print_trace(const char* event, CodeBlob* cb, int size = 0) PRODUCT_RETURN; | |
115 | 133 |
116 // The full limits of the codeCache | 134 // The full limits of the codeCache |
117 static address low_bound() { return (address) _heap->low_boundary(); } | 135 static address low_bound() { return (address) _heap->low_boundary(); } |
118 static address high_bound() { return (address) _heap->high_boundary(); } | 136 static address high_bound() { return (address) _heap->high_boundary(); } |
119 | 137 |