Mercurial > hg > truffle
comparison src/share/vm/oops/klass.hpp @ 2177:3582bf76420e
6990754: Use native memory and reference counting to implement SymbolTable
Summary: move symbols from permgen into C heap and reference count them
Reviewed-by: never, acorn, jmasa, stefank
author | coleenp |
---|---|
date | Thu, 27 Jan 2011 16:11:27 -0800 |
parents | f95d63e2154a |
children | d25d4ca69222 c7f3d0b4570f |
comparison
equal
deleted
inserted
replaced
2176:27e4ea99855d | 2177:3582bf76420e |
---|---|
210 // | 210 // |
211 // Where to look to observe a supertype (it is &_secondary_super_cache for | 211 // Where to look to observe a supertype (it is &_secondary_super_cache for |
212 // secondary supers, else is &_primary_supers[depth()]. | 212 // secondary supers, else is &_primary_supers[depth()]. |
213 juint _super_check_offset; | 213 juint _super_check_offset; |
214 | 214 |
215 // Class name. Instance classes: java/lang/String, etc. Array classes: [I, | |
216 // [Ljava/lang/String;, etc. Set to zero for all other kinds of classes. | |
217 Symbol* _name; | |
218 | |
215 public: | 219 public: |
216 oop* oop_block_beg() const { return adr_secondary_super_cache(); } | 220 oop* oop_block_beg() const { return adr_secondary_super_cache(); } |
217 oop* oop_block_end() const { return adr_next_sibling() + 1; } | 221 oop* oop_block_end() const { return adr_next_sibling() + 1; } |
218 | 222 |
219 protected: | 223 protected: |
233 klassOop _primary_supers[_primary_super_limit]; | 237 klassOop _primary_supers[_primary_super_limit]; |
234 // java/lang/Class instance mirroring this class | 238 // java/lang/Class instance mirroring this class |
235 oop _java_mirror; | 239 oop _java_mirror; |
236 // Superclass | 240 // Superclass |
237 klassOop _super; | 241 klassOop _super; |
238 // Class name. Instance classes: java/lang/String, etc. Array classes: [I, | |
239 // [Ljava/lang/String;, etc. Set to zero for all other kinds of classes. | |
240 symbolOop _name; | |
241 // First subclass (NULL if none); _subklass->next_sibling() is next one | 242 // First subclass (NULL if none); _subklass->next_sibling() is next one |
242 klassOop _subklass; | 243 klassOop _subklass; |
243 // Sibling link (or NULL); links all subklasses of a klass | 244 // Sibling link (or NULL); links all subklasses of a klass |
244 klassOop _next_sibling; | 245 klassOop _next_sibling; |
245 | 246 |
359 oop* adr_super() const { return (oop*)&_super; } | 360 oop* adr_super() const { return (oop*)&_super; } |
360 oop* adr_primary_supers() const { return (oop*)&_primary_supers[0]; } | 361 oop* adr_primary_supers() const { return (oop*)&_primary_supers[0]; } |
361 oop* adr_secondary_super_cache() const { return (oop*)&_secondary_super_cache; } | 362 oop* adr_secondary_super_cache() const { return (oop*)&_secondary_super_cache; } |
362 oop* adr_secondary_supers()const { return (oop*)&_secondary_supers; } | 363 oop* adr_secondary_supers()const { return (oop*)&_secondary_supers; } |
363 oop* adr_java_mirror() const { return (oop*)&_java_mirror; } | 364 oop* adr_java_mirror() const { return (oop*)&_java_mirror; } |
364 oop* adr_name() const { return (oop*)&_name; } | |
365 oop* adr_subklass() const { return (oop*)&_subklass; } | 365 oop* adr_subklass() const { return (oop*)&_subklass; } |
366 oop* adr_next_sibling() const { return (oop*)&_next_sibling; } | 366 oop* adr_next_sibling() const { return (oop*)&_next_sibling; } |
367 | 367 |
368 public: | 368 public: |
369 // Allocation profiling support | 369 // Allocation profiling support |
509 virtual bool should_be_initialized() const { return false; } | 509 virtual bool should_be_initialized() const { return false; } |
510 // initializes the klass | 510 // initializes the klass |
511 virtual void initialize(TRAPS); | 511 virtual void initialize(TRAPS); |
512 // lookup operation for MethodLookupCache | 512 // lookup operation for MethodLookupCache |
513 friend class MethodLookupCache; | 513 friend class MethodLookupCache; |
514 virtual methodOop uncached_lookup_method(symbolOop name, symbolOop signature) const; | 514 virtual methodOop uncached_lookup_method(Symbol* name, Symbol* signature) const; |
515 public: | 515 public: |
516 methodOop lookup_method(symbolOop name, symbolOop signature) const { | 516 methodOop lookup_method(Symbol* name, Symbol* signature) const { |
517 return uncached_lookup_method(name, signature); | 517 return uncached_lookup_method(name, signature); |
518 } | 518 } |
519 | 519 |
520 // array class with specific rank | 520 // array class with specific rank |
521 klassOop array_klass(int rank, TRAPS) { return array_klass_impl(false, rank, THREAD); } | 521 klassOop array_klass(int rank, TRAPS) { return array_klass_impl(false, rank, THREAD); } |
535 virtual klassOop array_klass_impl(bool or_null, int rank, TRAPS); | 535 virtual klassOop array_klass_impl(bool or_null, int rank, TRAPS); |
536 virtual klassOop array_klass_impl(bool or_null, TRAPS); | 536 virtual klassOop array_klass_impl(bool or_null, TRAPS); |
537 | 537 |
538 public: | 538 public: |
539 virtual void remove_unshareable_info(); | 539 virtual void remove_unshareable_info(); |
540 virtual void shared_symbols_iterate(SymbolClosure* closure); | |
540 | 541 |
541 protected: | 542 protected: |
542 // computes the subtype relationship | 543 // computes the subtype relationship |
543 virtual bool compute_is_subtype_of(klassOop k); | 544 virtual bool compute_is_subtype_of(klassOop k); |
544 public: | 545 public: |
577 // type testing operations | 578 // type testing operations |
578 virtual bool oop_is_instance_slow() const { return false; } | 579 virtual bool oop_is_instance_slow() const { return false; } |
579 virtual bool oop_is_instanceRef() const { return false; } | 580 virtual bool oop_is_instanceRef() const { return false; } |
580 virtual bool oop_is_array() const { return false; } | 581 virtual bool oop_is_array() const { return false; } |
581 virtual bool oop_is_objArray_slow() const { return false; } | 582 virtual bool oop_is_objArray_slow() const { return false; } |
582 virtual bool oop_is_symbol() const { return false; } | |
583 virtual bool oop_is_klass() const { return false; } | 583 virtual bool oop_is_klass() const { return false; } |
584 virtual bool oop_is_thread() const { return false; } | 584 virtual bool oop_is_thread() const { return false; } |
585 virtual bool oop_is_method() const { return false; } | 585 virtual bool oop_is_method() const { return false; } |
586 virtual bool oop_is_constMethod() const { return false; } | 586 virtual bool oop_is_constMethod() const { return false; } |
587 virtual bool oop_is_methodData() const { return false; } | 587 virtual bool oop_is_methodData() const { return false; } |
779 // Return self, except for abstract classes with exactly 1 | 779 // Return self, except for abstract classes with exactly 1 |
780 // implementor. Then return the 1 concrete implementation. | 780 // implementor. Then return the 1 concrete implementation. |
781 Klass *up_cast_abstract(); | 781 Klass *up_cast_abstract(); |
782 | 782 |
783 // klass name | 783 // klass name |
784 symbolOop name() const { return _name; } | 784 Symbol* name() const { return _name; } |
785 void set_name(symbolOop n) { oop_store_without_check((oop*) &_name, (oop) n); } | 785 void set_name(Symbol* n); |
786 | 786 |
787 friend class klassKlass; | 787 friend class klassKlass; |
788 | 788 |
789 public: | 789 public: |
790 // jvm support | 790 // jvm support |