< prev index next >

src/hotspot/share/oops/valueKlass.hpp

Print this page

        

*** 48,57 **** --- 48,58 ---- *((Array<VMRegPair>**)adr_return_regs()) = NULL; *((address*)adr_pack_handler()) = NULL; *((address*)adr_unpack_handler()) = NULL; assert(pack_handler() == NULL, "pack handler not null"); *((int*)adr_default_value_offset()) = 0; + *((Klass**)adr_value_array_klass()) = NULL; set_prototype_header(markOopDesc::always_locked_prototype()); } ValueKlassFixedBlock* valueklass_static_block() const { address adr_jf = adr_value_fields_klasses();
*** 109,128 **** address adr_default_value_offset() const { assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized"); return ((address)_adr_valueklass_fixed_block) + in_bytes(default_value_offset_offset()); } int collect_fields(GrowableArray<SigEntry>* sig, int base_off = 0) const; void cleanup_blobs(); protected: // Returns the array class for the n'th dimension ! Klass* array_klass_impl(bool or_null, int n, TRAPS); // Returns the array class with this class as element type ! Klass* array_klass_impl(bool or_null, TRAPS); public: // Type testing bool is_value_slow() const { return true; } --- 110,147 ---- address adr_default_value_offset() const { assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized"); return ((address)_adr_valueklass_fixed_block) + in_bytes(default_value_offset_offset()); } + address adr_value_array_klass() const { + assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized"); + return ((address)_adr_valueklass_fixed_block) + in_bytes(byte_offset_of(ValueKlassFixedBlock, _value_array_klass)); + } + + Klass* get_value_array_klass() const { + return *(Klass**)adr_value_array_klass(); + } + + Klass* acquire_value_array_klass() const { + return OrderAccess::load_acquire((Klass**)adr_value_array_klass()); + } + + Klass* allocate_value_array_klass(TRAPS); + int collect_fields(GrowableArray<SigEntry>* sig, int base_off = 0) const; void cleanup_blobs(); protected: // Returns the array class for the n'th dimension ! Klass* array_klass_impl(ArrayStorageProperties storage_props, bool or_null, int n, TRAPS); // Returns the array class with this class as element type ! Klass* array_klass_impl(ArrayStorageProperties storage_props, bool or_null, TRAPS); ! ! // Specifically flat array klass ! Klass* value_array_klass(ArrayStorageProperties storage_props, bool or_null, int rank, TRAPS); public: // Type testing bool is_value_slow() const { return true; }
*** 141,150 **** --- 160,172 ---- // in Java heap like Java objects. virtual int size_helper() const { return layout_helper_to_size_helper(layout_helper()); } + // Metadata iterators + void array_klasses_do(void f(Klass* k)); + // allocate_instance() allocates a stand alone value in the Java heap instanceOop allocate_instance(TRAPS); // minimum number of bytes occupied by nonstatic fields, HeapWord aligned or pow2 int raw_value_byte_size() const;
*** 180,190 **** // store the value of this klass contained with src into dst, raw data ptr void value_store(void* src, void* dst, size_t raw_byte_size, bool dst_is_heap, bool dst_uninitialized); // GC support... - void iterate_over_inside_oops(OopClosure* f, oop value); // oop iterate raw value type data pointer (where oop_addr may not be an oop, but backing/array-element) template <typename T, class OopClosureType> inline void oop_iterate_specialized(const address oop_addr, OopClosureType* closure); --- 202,211 ----
< prev index next >