Mercurial > hg > truffle
comparison src/share/vm/runtime/fieldDescriptor.hpp @ 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 | 1d7922586cf6 |
children | 18fb7da42534 |
comparison
equal
deleted
inserted
replaced
6724:36d1d483d5d6 | 6725:da91efe96a93 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1997, 2011, 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. |
23 */ | 23 */ |
24 | 24 |
25 #ifndef SHARE_VM_RUNTIME_FIELDDESCRIPTOR_HPP | 25 #ifndef SHARE_VM_RUNTIME_FIELDDESCRIPTOR_HPP |
26 #define SHARE_VM_RUNTIME_FIELDDESCRIPTOR_HPP | 26 #define SHARE_VM_RUNTIME_FIELDDESCRIPTOR_HPP |
27 | 27 |
28 #include "oops/constantPoolOop.hpp" | 28 #include "oops/constantPool.hpp" |
29 #include "oops/klassOop.hpp" | |
30 #include "oops/oop.inline.hpp" | |
31 #include "oops/symbol.hpp" | 29 #include "oops/symbol.hpp" |
32 #include "runtime/fieldType.hpp" | 30 #include "runtime/fieldType.hpp" |
33 #include "utilities/accessFlags.hpp" | 31 #include "utilities/accessFlags.hpp" |
34 #include "utilities/constantTag.hpp" | 32 #include "utilities/constantTag.hpp" |
35 | 33 |
43 int _index; // the field index | 41 int _index; // the field index |
44 constantPoolHandle _cp; | 42 constantPoolHandle _cp; |
45 | 43 |
46 // update the access_flags for the field in the klass | 44 // update the access_flags for the field in the klass |
47 void update_klass_field_access_flag() { | 45 void update_klass_field_access_flag() { |
48 instanceKlass* ik = instanceKlass::cast(field_holder()); | 46 InstanceKlass* ik = InstanceKlass::cast(field_holder()); |
49 ik->field(index())->set_access_flags(_access_flags.as_short()); | 47 ik->field(index())->set_access_flags(_access_flags.as_short()); |
50 } | 48 } |
51 | 49 |
52 FieldInfo* field() const { | 50 FieldInfo* field() const { |
53 instanceKlass* ik = instanceKlass::cast(field_holder()); | 51 InstanceKlass* ik = InstanceKlass::cast(field_holder()); |
54 return ik->field(_index); | 52 return ik->field(_index); |
55 } | 53 } |
56 | 54 |
57 public: | 55 public: |
58 Symbol* name() const { | 56 Symbol* name() const { |
59 return field()->name(_cp); | 57 return field()->name(_cp); |
60 } | 58 } |
61 Symbol* signature() const { | 59 Symbol* signature() const { |
62 return field()->signature(_cp); | 60 return field()->signature(_cp); |
63 } | 61 } |
64 klassOop field_holder() const { return _cp->pool_holder(); } | 62 Klass* field_holder() const { return _cp->pool_holder(); } |
65 constantPoolOop constants() const { return _cp(); } | 63 ConstantPool* constants() const { return _cp(); } |
66 AccessFlags access_flags() const { return _access_flags; } | 64 AccessFlags access_flags() const { return _access_flags; } |
67 oop loader() const; | 65 oop loader() const; |
68 // Offset (in words) of field from start of instanceOop / klassOop | 66 // Offset (in words) of field from start of instanceOop / Klass* |
69 int offset() const { return field()->offset(); } | 67 int offset() const { return field()->offset(); } |
70 Symbol* generic_signature() const; | 68 Symbol* generic_signature() const; |
71 int index() const { return _index; } | 69 int index() const { return _index; } |
72 typeArrayOop annotations() const; | 70 AnnotationArray* annotations() const; |
73 | 71 |
74 // Initial field value | 72 // Initial field value |
75 bool has_initial_value() const { return field()->initval_index() != 0; } | 73 bool has_initial_value() const { return field()->initval_index() != 0; } |
76 int initial_value_index() const { return field()->initval_index(); } | 74 int initial_value_index() const { return field()->initval_index(); } |
77 constantTag initial_value_tag() const; // The tag will return true on one of is_int(), is_long(), is_single(), is_double() | 75 constantTag initial_value_tag() const; // The tag will return true on one of is_int(), is_long(), is_single(), is_double() |
111 _access_flags.set_is_field_modification_watched(value); | 109 _access_flags.set_is_field_modification_watched(value); |
112 update_klass_field_access_flag(); | 110 update_klass_field_access_flag(); |
113 } | 111 } |
114 | 112 |
115 // Initialization | 113 // Initialization |
116 void initialize(klassOop k, int index); | 114 void initialize(InstanceKlass* ik, int index); |
117 | 115 |
118 // Print | 116 // Print |
119 void print() { print_on(tty); } | 117 void print() { print_on(tty); } |
120 void print_on(outputStream* st) const PRODUCT_RETURN; | 118 void print_on(outputStream* st) const PRODUCT_RETURN; |
121 void print_on_for(outputStream* st, oop obj) PRODUCT_RETURN; | 119 void print_on_for(outputStream* st, oop obj) PRODUCT_RETURN; |