mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
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:
parent
36eee7c8c8
commit
5c58d27aac
853 changed files with 26124 additions and 82956 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue