6964458: Reimplement class meta-data storage to use native memory

Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes

Co-authored-by: Stefan Karlsson <stefan.karlsson@oracle.com>
Co-authored-by: Mikael Gerdin <mikael.gerdin@oracle.com>
Co-authored-by: Tom Rodriguez <tom.rodriguez@oracle.com>
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
This commit is contained in:
Jon Masamitsu 2012-09-01 13:25:18 -04:00 committed by Coleen Phillimore
parent 36eee7c8c8
commit 5c58d27aac
853 changed files with 26124 additions and 82956 deletions

View file

@ -152,7 +152,7 @@ REGISTER_DECLARATION(Register, I5_savedSP , I5); // Saved SP before bumpin
// is added and removed as needed in the frame code.
// Interface to signature handler
REGISTER_DECLARATION(Register, Llocals , L7); // pointer to locals for signature handler
REGISTER_DECLARATION(Register, Lmethod , L6); // methodOop when calling signature handler
REGISTER_DECLARATION(Register, Lmethod , L6); // Method* when calling signature handler
#else
REGISTER_DECLARATION(Register, Lesp , L0); // expression stack pointer
@ -351,7 +351,7 @@ class Address VALUE_OBJ_CLASS_SPEC {
// Convert the raw encoding form into the form expected by the
// constructor for Address.
static Address make_raw(int base, int index, int scale, int disp, bool disp_is_oop);
static Address make_raw(int base, int index, int scale, int disp, relocInfo::relocType disp_reloc);
friend class Assembler;
};
@ -438,11 +438,11 @@ class AddressLiteral VALUE_OBJ_CLASS_SPEC {
_rspec(rspec_from_rtype(rtype, (address) addr)) {}
#endif
AddressLiteral(oop addr, relocInfo::relocType rtype = relocInfo::none)
AddressLiteral(Metadata* addr, relocInfo::relocType rtype = relocInfo::none)
: _address((address) addr),
_rspec(rspec_from_rtype(rtype, (address) addr)) {}
AddressLiteral(oop* addr, relocInfo::relocType rtype = relocInfo::none)
AddressLiteral(Metadata** addr, relocInfo::relocType rtype = relocInfo::none)
: _address((address) addr),
_rspec(rspec_from_rtype(rtype, (address) addr)) {}
@ -478,7 +478,7 @@ class ExternalAddress: public AddressLiteral {
public:
ExternalAddress(address target) : AddressLiteral(target, reloc_for_target( target)) {}
ExternalAddress(oop* target) : AddressLiteral(target, reloc_for_target((address) target)) {}
ExternalAddress(Metadata** target) : AddressLiteral(target, reloc_for_target((address) target)) {}
};
inline Address RegisterImpl::address_in_saved_window() const {
@ -2311,11 +2311,14 @@ public:
void call_VM_leaf(Register thread_cache, address entry_point, Register arg_1, Register arg_2, Register arg_3);
void get_vm_result (Register oop_result);
void get_vm_result_2(Register oop_result);
void get_vm_result_2(Register metadata_result);
// vm result is currently getting hijacked to for oop preservation
void set_vm_result(Register oop_result);
// Emit the CompiledIC call idiom
void ic_call(address entry, bool emit_delay = true);
// if call_VM_base was called with check_exceptions=false, then call
// check_and_forward_exception to handle exceptions when it is safe
void check_and_forward_exception(Register scratch_reg);
@ -2392,6 +2395,13 @@ public:
inline void set_oop_constant (jobject obj, Register d); // uses constant_oop_address
inline void set_oop (const AddressLiteral& obj_addr, Register d); // same as load_address
// metadata in code that we have to keep track of
AddressLiteral allocate_metadata_address(Metadata* obj); // allocate_index
AddressLiteral constant_metadata_address(Metadata* obj); // find_index
inline void set_metadata (Metadata* obj, Register d); // uses allocate_metadata_address
inline void set_metadata_constant (Metadata* obj, Register d); // uses constant_metadata_address
inline void set_metadata (const AddressLiteral& obj_addr, Register d); // same as load_address
void set_narrow_oop( jobject obj, Register d );
// nop padding