Mercurial > hg > graal-jvmci-8
comparison src/share/vm/oops/markOop.cpp @ 6725:da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author | coleenp |
---|---|
date | Sat, 01 Sep 2012 13:25:18 -0400 |
parents | f08d439fab8c |
children | f34d701e952e |
comparison
equal
deleted
inserted
replaced
6724:36d1d483d5d6 | 6725:da91efe96a93 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
48 if (has_bias_pattern()) st->print("biased,"); | 48 if (has_bias_pattern()) st->print("biased,"); |
49 st->print("hash %#lx,", hash()); | 49 st->print("hash %#lx,", hash()); |
50 st->print("age %d)", age()); | 50 st->print("age %d)", age()); |
51 } | 51 } |
52 } | 52 } |
53 | |
54 | |
55 // Give advice about whether the oop that contains this markOop | |
56 // should be cached or not. | |
57 bool markOopDesc::should_not_be_cached() const { | |
58 // the cast is because decode_pointer() isn't marked const | |
59 if (is_marked() && ((markOopDesc *)this)->decode_pointer() != NULL) { | |
60 // If the oop containing this markOop is being forwarded, then | |
61 // we are in the middle of GC and we do not want the containing | |
62 // oop to be added to a cache. We have no way of knowing whether | |
63 // the cache has already been visited by the current GC phase so | |
64 // we don't know whether the forwarded oop will be properly | |
65 // processed in this phase. If the forwarded oop is not properly | |
66 // processed, then we'll see strange crashes or asserts during | |
67 // the next GC run because the markOop will contain an unexpected | |
68 // value. | |
69 // | |
70 // This situation has been seen when we are GC'ing a methodOop | |
71 // because we use the methodOop while we're GC'ing it. Scary | |
72 // stuff. Some of the uses the methodOop cause the methodOop to | |
73 // be added to the OopMapCache in the instanceKlass as a side | |
74 // effect. This check lets the cache maintainer know when a | |
75 // cache addition would not be safe. | |
76 return true; | |
77 } | |
78 | |
79 // caching the containing oop should be just fine | |
80 return false; | |
81 } |