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